我无法让Swing布局做我想做的事。我希望包含两个JEditorPanes的Center面板在包含相等(固定)高度的'n'窗格时滚动。
我一直在Netbean的UI设计师中玩,试图让它工作
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
}
答案 0 :(得分:4)
这是sscce,可以指导您的进一步努力。指定每个面板的首选大小以强制显示滚动条;类似地,设置框架的整体大小(在pack()
之后)以强制显示外部滚动条。有关详情,请参阅此Q&A。另请注意使用符合RFC 2606的网址。
顺便说一句,在过度依赖GUI编辑器之前,你应该研究layouts。
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://stackoverflow.com/a/12827643/230513
* @see https://stackoverflow.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);
}
});
}
}