Java swing JTable在使用JScrollPane时不显示滚动条

问题描述 投票:0回答:2

我有一个tablePanel,这是一个JScrollPane,并用JTable初始化,JTabledefaultTableModel初始化。当我尝试在表中添加一些行,但没有看到滚动条,任何回复都是适当的。

JFrame jFrame = new JFrame();

//rows will be added dynamically.
DefaultTableModel defautTableModel = new DefaultTableModel(null,columnNames){
  @Override
  public boolean isCellEditable(int row, int column) {
    return false;
  }
};

JTable jTable = new JTable(defautTableModel);
jTable.setLocation(20,60);
jTable.setSize(950,450);
jTable.setRowHeight(25);

jTable.getColumn("No.").setMaxWidth(45);
jTable.getColumn("position").setMaxWidth(45);
...

JTableHeader jTableHeader = jTable.getTableHeader();
jTableHeader.setLocation(20,30);
jTableHeader.setSize(950,30);
jTableHeader.setFont(new Font(null, Font.BOLD, 16));
jTableHeader.setResizingAllowed(true);
jTableHeader.setReorderingAllowed(true);

JScrollPane tablePanel = new JScrollPane(jTable);
tablePanel.setLayout(null);
tablePanel.add(jTableHeader);
tablePanel.add(jTable);

jFrame.setContentPane(tablePanel);
java swing
2个回答
3
投票

tablePanel.setLayout(null);是您问题的主要原因。 JScrollPane有自己的布局管理器,用于管理滚动条,查看端口和标题。

tablePanel.add是你的下一个问题,因为你不应该向JScrollPane添加组件。相反,你应该设置JScrollPaneJViewPort

但是,既然你正在使用JScrollPane tablePanel = new JScrollPane(jTable);,那么实际上不需要跟随它的三条线。

我强烈建议你仔细看看:

现在,在你告诉我我的建议是如何实际工作之前,请重新阅读Laying Out Components Within a Container - 这是在Swing真正开始为你工作之前需要理解和掌握的基石概念


1
投票
JScrollPane tablePanel = new JScrollPane(jTable);

// No need for the below code

/*tablePanel.setLayout(null);

tablePanel.add(jTableHeader);

tablePanel.add(jTable);*/

jFrame.setContentPane(tablePanel);
© www.soinside.com 2019 - 2024. All rights reserved.