我有一个包含在JPanel中的JScrollPane中的JTable,它包含在JFrame中 . 我使用了NetBeans GUI构建器,因此下面隐藏了一些自动生成的代码 .
在 PanelWithTable.java
:
public class PanelWithTable extends javax.swing.JPanel {
public PanelWithTable() {
initComponents();
}
public JTable getTable() {
return jTable1;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(jTable1.getWidth(), jTable1.getHeight());
}
...
//Generated code
...
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
}
在 OuterFrame.java
:
public class OuterFrame extends javax.swing.JFrame {
public OuterFrame() {
initComponents();
panelWithTable1.getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0, n = panelWithTable1.getTable().getColumnModel().getColumnCount(); i < n; i++) {
panelWithTable1.getTable().getColumnModel().getColumn(i).setPreferredWidth(16);
}
pack();
}
public PanelWithTable getPanelWithTable() {
return panelWithTable1;
}
...
//Generated code
...
private main.PanelWithTable panelWithTable1;
}
如果我不覆盖 getPreferredSize()
,它看起来像这样:
我希望JPanel与JTable的大小相同,因此它不显示边框 . 当重写 getPreferredSize()
时,它看起来像这样:
它略小于表格,它会切断最后一行和一列 . 如何才能正确地使JPanel与JTable的大小相同?
3 回答
由于您可以轻松使用netbeans,因此可以将
jtable
拖到jpanel
的角落 . Netbeans将处理其余的东西 . 尝试这个建议,看看那里生成的代码 . 然后你可以按照你想要的方式修改它 .JTable
里面JScrollPane
)为
JTable
设置PreferredScrollableViewportSize
并将JPanel
的默认值FlowLayout
更改为GridBagLayout
(设置填充为GridBagConstraints.HORIZONTAL
)或最终使用BorderLayout
,将JScrollPane
更改为CENTER
区域JTable
放入JPanel
)要将
JPanel
的默认值FlowLayout
更改为GridBagLayout
(设置填充为GridBagConstraints.HORIZONTAL
)或最终使用BorderLayout
,将JTable
更改为CENTER
区域SSCCE
/MCVE
,简短,可运行,可编辑JTable
应该添加到JScrollPane
然后在
JPanel
中添加JScrollPane
并最终在
JFrame
中添加JPanel
Note: 如果使用正确的布局管理器,则无需设置首选大小 . 默认情况下,组件在滚动窗格中进行调整 .
有关更多信息,请查看How to Use Tables上的Swing教程
示例代码: