我有一个包含在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的大小相同?
答案 0 :(得分:3)
(JTable
内的JScrollPane
)
为PreferredScrollableViewportSize
设置JTable
并将FlowLayout
的默认JPanel
更改为GridBagLayout
(设置为GridBagConstraints.HORIZONTAL
)或最终使用BorderLayout
,将JScrollPane
放到CENTER
区域
(JTable
置于JPanel
)
将FlowLayout
的默认JPanel
更改为GridBagLayout
(设置为GridBagConstraints.HORIZONTAL
}或最终使用BorderLayout
,将JTable
更改为CENTER
SSCCE
区域
更快地发布MCVE
/ {{1}},简短,可运行,可编辑
答案 1 :(得分:1)
我有一个包含在JFrame中的JPanel中的JTable。
JTable
应添加到JScrollPane
JScrollPane
JPanel
JPanel
JFrame
注意:如果您使用的是正确的布局管理器,则无需设置首选大小。默认情况下,组件在滚动窗格中进行调整。
有关详细信息,请查看How to Use Tables
上的 Swing Tutorial示例代码:
JTable table=new JTable();
JScrollPane scrollPane=new JScrollPane(table);
JPanel panel=new JPanel();
panel.add(scrollPane);
frame.add(panel);
答案 2 :(得分:1)
由于您可以轻松使用netbeans,因此可以将jtable
拖到jpanel
的角落。 Netbeans将处理其余的东西。尝试这个建议,看看那里生成的代码。然后你可以按照你想要的方式修改它。