【问题标题】:how to add JTable in JFrame at Run time?如何在运行时在 JFrame 中添加 JTable?
【发布时间】:2011-10-31 09:17:11
【问题描述】:

我正在使用 JFrame 和 JPanel 创建一个框架。JFrame 包含组合框、复选框、JLabels 等。JPanel 的布局设置为“null”,因为我使用 setBounds(int,int,int,int) 来设置JFrame 上组件的位置。

还有一个JButton(命名为“Submit”)。在提交按钮上我添加了actionListener,这样如果我点击这个按钮,就会在框架上生成一个表格(在运行时)。

JTable 已成功显示在 JFrame 上,但表格列名称未与 JFrame 一起显示(按下提交按钮时仅显示表格数据)。

我也在使用 setBounds 和 JTable。在这种情况下我应该怎么做?

submitButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
       Object ColumnName[] = {"Document Name", "Modified Date", "Size(in MB)"};
       Object data[][] = { {"test.txt", "24-Oct-2011", "540"}};
       table = new JTable(data,ColumnName);
       table.setBounds(20,230,330,100);
       panel.add(table);
       panel.repaint();
       panel.revalidate();
     }
});

请尽快给我您所有宝贵的建议。 谢谢。

【问题讨论】:

  • Give me your all valuable suggestions soon. Thank you. == 然后遵循@Amn +1 的建议,有价值的东西都有
  • @mKorbel 先生,我遵循了 Amn 建议的相同方式。但这不起作用,使用这种方式后,所有组件都不会添加到框架中。

标签: java swing runtime jtable


【解决方案1】:

它可以工作revalidate(); panel 的方法。 call在面板上设置表格后。
JScrollPane 是最好的方法。

【讨论】:

  • 在将表格添加到面板后,我使用了 repaint() 和 revalidate() 方法。所有 RowData(Data) 正在显示,但没有列名称。
【解决方案2】:

我认为你不能:

  1. 使用setBounds(int, int, int, int),因为这是LayoutManager 的工作
  2. 在运行时重新创建JTable。只需执行DefalutTableModel,您就可以添加/删除TableRows,重置TableModel - 所有更改都会立即显示在JTable 中。

你可以:

  1. (如两张海报所述)将JTable 放入JScrollPane
  2. 浏览表格教程中的示例和大量与 Swing 相关的示例here

【讨论】:

  • 先生,我没有使用任何 LayoutManager(设置为 null)。所以这就是我使用 setBounds() 方法的原因。
  • 我的 Headername 问题已解决。我正在使用两个 JPanel 面板 1 和面板 2。 panel1 包含所有组件(包括提交按钮),panel2 包含 jtable(单击提交按钮时)。但是现在 jtable 显示在整个框架上(包括 panel1)。你能建议我解决两个面板位置的解决方案吗?
  • 取决于第一个 JComponents 是什么。 JPanel,如果只有 JTable 的服务,那么按照 BorderLayout 的教程,将此 JPanel 放置到 NORTH 或 SOUTH 区域,并将 JTable(在 JScrollPanel 内)放置到 CENTER 区域,那么你的 GUI 是相当可调整的,最好是开始新线程关于在 GUI 中布局 JCompoentns,只有几个 JComponent,有想法如何去做,而不是如何调试您的项目 :-) 想法描述为 sscce.org,那么获得正确答案的机会就更高
【解决方案3】:

您需要先将 JTable 添加到 JScrollPane 中,然后将该 JScrollPane 添加到您的主面板中。

JScrollPane jsp = new JScrollPane(jtable);

看看这个:JTable

编辑:这个帖子讨论了同样的问题:Jtable Columns

【讨论】:

  • 我只使用了一个 JPanel,据你说,我已将 JScrollPane 添加到我的主面板中,但它不起作用。编辑:该线程与数据库有关。
  • 我假设您必须将 JPanel 添加到您的 JFrame 中。所以它的链接方式是:scrollpane.add(table) --> panel.add(scrollpane) --> frame.add(panel)
  • table = new JTable(data,ColumnName); table.setBounds(20,230,330,100);面板。添加(表); panel.repaint(); panel.revalidate();我正在通过这种方式将 Jtable 添加到 Jframe。Thia 代码是在 actionListener(在提交按钮处)编写的
  • 而不是将表格添加到您的面板中,而是将其添加到 JScrollPane,就像我在原始回复中显示的那样,然后将此滚动窗格添加到您的 JPanel,最后将 JPanel 添加到 JFrame。其他一切都是一样的。 JScrollPane 为您的表格创建一个带有列标题和滚动条的视口。
  • 我按照你的建议做了,但它不起作用。现在连数据也没有显示。我想问我是否必须声明 JScrollPane scrollpane=new JScrollPane();在 actionListener 内部或外部。
猜你喜欢
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2011-04-02
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2023-03-28
相关资源
最近更新 更多