Разметка качания - центральная панель для прокрутки несколькими панелями JEditor
У меня проблемы с получением макетов Swing, чтобы делать то, что я хочу. Я хочу, чтобы центральная панель, которая содержит две JEditorPanes, прокручивалась, когда она содержала n панелей одинаковой (фиксированной) высоты.
Я играл в дизайнере интерфейса Netbean, чтобы попытаться заставить его работать
jPanel3 - центральная панель
jEditorPane4 и 5 - некоторые примеры панелей редактора (они будут содержать комментарии)
public class GBugForm1 extends javax.swing.JFrame {
public static void main(String[] args)
{
GBugForm1 form;
form = new GBugForm1();
form.setDefaultCloseOperation(javax.swing.JDialog.DISPOSE_ON_CLOSE);
form.setSize(500,500);
form.setVisible(true);
}
/**
* Creates new form GBugForm
*/
public GBugForm1() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jScrollPane6 = new javax.swing.JScrollPane();
jEditorPane4 = new javax.swing.JEditorPane();
jScrollPane4 = new javax.swing.JScrollPane();
jEditorPane5 = new javax.swing.JEditorPane();
jPanel4 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
setPreferredSize(new java.awt.Dimension(500, 460));
setLayout(new java.awt.BorderLayout());
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.PAGE_AXIS));
jEditorPane4.setPreferredSize(new java.awt.Dimension(106, 200));
jScrollPane6.setViewportView(jEditorPane4);
jPanel3.add(jScrollPane6);
jScrollPane4.setViewportView(jEditorPane5);
jPanel3.add(jScrollPane4);
jPanel1.add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel4.setPreferredSize(new java.awt.Dimension(492, 105));
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 500, Short.MAX_VALUE)
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 105, Short.MAX_VALUE)
);
jPanel1.add(jPanel4, java.awt.BorderLayout.PAGE_START);
add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel2.setPreferredSize(new java.awt.Dimension(400, 40));
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 500, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 40, Short.MAX_VALUE)
);
add(jPanel2, java.awt.BorderLayout.SOUTH);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JEditorPane jEditorPane4;
private javax.swing.JEditorPane jEditorPane5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JScrollPane jScrollPane6;
// End of variables declaration
}
1 ответ
Вот пример, который может направить ваши дальнейшие усилия. Предпочтительный размер каждой панели указывается для отображения полосы прокрутки; аналогичным образом устанавливается общий размер кадра (после pack()
) заставить внешнюю полосу прокрутки появиться. Смотрите этот Q&A для получения дополнительной информации. Обратите внимание также на использование URL-адреса, соответствующего RFC 2606.
Кроме того, вы, вероятно, должны изучить макеты, прежде чем слишком полагаться на графический редактор.
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/**
* @see https://stackru.com/a/12827643/230513
* @see https://stackru.com/questions/4755524
*/
public class HtmlView extends JPanel {
private static final String EXAMPLE = "http://www.example.com";
private final JEditorPane jep;
public HtmlView(String url) {
super(new GridLayout(1, 1));
jep = new JEditorPane();
try {
jep.setPage(EXAMPLE);
} catch (IOException ioe) {
ioe.printStackTrace(System.err);
}
jep.setEditable(false);
this.add(new JScrollPane(jep));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 200);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.add(new HtmlView(EXAMPLE));
panel.add(new HtmlView(EXAMPLE));
panel.add(new HtmlView(EXAMPLE));
f.add(new JScrollPane(panel));
f.pack();
f.setSize(640, 480);
f.setVisible(true);
}
});
}
}