为什么我的JTable会在新的JFrame上显示,而不是在我现有的JPanel上显示?

时间:2013-08-22 08:56:22

标签: java swing jtable jframe jtabbedpane

我正在使用JDBC。 我的类有一个带有JTabbedPane的JFrame,用我的不同方法显示我的JPanels UI。 在这个面板上,我想在JTable中显示一个带有其他按钮列的结果集。 当我在新的JFrame上显示它时,这一切当前都在工作,但是当我尝试在现有的JFrame上显示它时。有人可以解释一下原因吗。

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    contentPane.add(tabbedPane, BorderLayout.CENTER);

JPanel panel = new JPanel();
    tabbedPane.addTab("Main", null, panel, null);
    panel.setLayout(null);


JTable table = new JTable(model);

    DisplayButtonColumn testWithButtons1 = new DisplayButtonColumn(table,
            displayHandler.getColCount());
    DisplayButtonColumn testWithButtons2 = new DisplayButtonColumn(table,
            displayHandler.getColCount() + 1);

    panel.add(new JScrollPane(table));

//      JFrame f = new JFrame();
//      f.setSize(1000, 500);
//      f.getContentPane().add(new JScrollPane(table));
//      f.setVisible(true);

1 个答案:

答案 0 :(得分:1)

panel.setLayout(null);

问题是null布局。 不要那样做。 Swing旨在与布局管理器一起使用,而不是这样做会几乎毫无例外地导致麻烦。使用绝对布局需要您手动管理组件的边界,而您不是这样做的。如果你需要的东西不是默认的FlowLayout,只需创建一个符合你需求的东西:

panel.setLayout(new BorderLayout());

(也可以在没有帮助面板的情况下添加到JTabbedPane,但我想您需要在标签中添加更多组件。