首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Swing表不重写

Swing表不重写
EN

Stack Overflow用户
提问于 2014-04-03 13:51:03
回答 1查看 341关注 0票数 0

主窗口类(ExtendedJFrame,用GUI编辑器构建)保存对JTable对象的引用(让我们称它为table)。开始时是空的new JTable()。并将其添加到JPanel (让我们称之为jpanel1)中,该窗口也位于主窗口中。

用户现在从菜单中选择他想要做的事情--比如创建新的表格,编辑表格中的颜色等等。如果他选择创建新表,那么特定的扩展customJPanel1) (让我们称它为JPanel )显示了选项。customJPanel1从主窗口接收对的引用。这是我们要处理的桌子。

现在,用户已经为不同的JTable构造函数显示了不同的选项。他选择一个,填写一些信息,然后按下按钮。之后,根据他选择的内容,创建了新的JTable

例如,如果他选择空构造函数,就会发生这样的情况:table=new JTable() in customJPanel1。正如您所知道的,您不能在显示组件时对swing组件执行此操作。所以我就这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JPanel panel=(JPanel) table.getParent().getParent().getParent() // this is to get reference to jPanel1 which is holding this table.
panel.removeAll()                         //this is to remove old table from panel
table=new JTable();  //this is to create new table according to what user choose
JScrollPane jScrollPane=new JScrollPane(table);
panel.add(jScrollPane);  // this is to add new table to panel
panel.revalidate();
panel.repaint();

这部分代码第一次运行良好,并显示了新表。现在,用户选择其他选项,例如,他希望对表进行着色。所以在主窗口我这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
customPanel1=new ColorPanel(table);

customPanel1应该在此构造函数中接收对新创建的表对象的引用,但它没有。主窗口仍在发送对旧表对象的引用。

我想在这里放一些代码,但我希望从我的简历中可以很容易地理解,因为我的代码有点大。

EN

回答 1

Stack Overflow用户

发布于 2014-04-03 14:02:11

这么说吧。您不希望继续创建新表,删除旧表并添加表。完全没有必要。要更改表数据,需要交换TableModels或更改现有的表数据。您可以在创建TableModel如何使用表上看到更多信息。

尝试作为一个简单的测试(而不是删除旧表并创建一个新表),只需更改数据/模型即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Object[] colNames = { "Col 1", "Col 2", "Col 3" };
Object[][] data = { { "Data", "Data", "Data" },
                    { "Data", "Data", "Data" },
                    { "Data", "Data", "Data" } };
DefaultTableModel model = new DefaultTableModel(data, cols);
table.setModel(model);

您应该会看到数据自动更改。

另外,如果您确实需要交换视图,而不是尝试添加一个删除容器,那么您应该考虑使用CardLayout来交换视图,而不必添加和删除组件(这可能会很麻烦)。您可以在如何使用CardLayout这里上看到更多内容。此外,您还可能希望查看如何在Netbeans生成器中使用CardLayout

更新

“因此,我必须清除每个用户对表所做的更改,以便与更改相匹配,例如,空构造函数(新JTable() )”

你可以用模型做这件事。查看您可以使用的DefaultTableModel中的所有方法。如果使用DefaultTableModel初始化表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);

然后,您可以使用以下方法

public void setColumnIdentifiers(Object[] newIdentifiers) -更改标头 public void setRowCount(int rowCount) -设置行数。使用0清除模型。 public void addRow(Object[] rowData) -动态添加行。

还有更多的方法。看看API

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22849684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文