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

时间:2018-01-02 10:24:53

标签: java swing

我的tablePanelJScrollPane,并使用JTable初始化,JTable初始化为defaultTableModel。当我尝试添加时一些行到表,但没有看到滚动条,任何回复都适用。

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);

2 个答案:

答案 0 :(得分:3)

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

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

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

我强烈建议你仔细看看:

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

答案 1 :(得分:1)

JScrollPane tablePanel = new JScrollPane(jTable);

// No need for the below code

/*tablePanel.setLayout(null);

tablePanel.add(jTableHeader);

tablePanel.add(jTable);*/

jFrame.setContentPane(tablePanel);