主窗口类(扩展JFrame
,使用GUI编辑器构建)持有对JTable
对象(让我们称之为表)的引用。开始时为空的new JTable()
。并添加到JPanel
(我们称之为jpanel1),它也在主窗口中。不改写的摇摆表
用户现在从菜单中选择了他想做的事 - 如创建新表,编辑表等颜色.. 如果他选择,他希望创建新表,然后特别延长JPanel
(让我们称之为它customJPanel1)与选项一起显示。 customJPanel1从主窗口收到对表的引用。这是我们将要处理的表格。
现在,用户已经为JTable
的不同构造函数显示了不同的选项。他挑选一个并填写一些信息,然后按下按钮。 之后,根据他选择新的JTable
创建。
例如,如果他选择空的构造函数,则会发生这种情况: table=new JTable()
in customJPanel1。正如你所知道的,你只是无法做到这一点摆动部件,当他们被显示。所以我这样做:
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();
这部分代码适用于第一次,并显示新的表。 现在用户选择其他选项,例如他想要着色表。 因此,在主窗口中我这样做:
customPanel1=new ColorPanel(table);
customPanel1应在此构造接收参考新创建的表对象,但事实并非如此。 主窗口仍在发送参考旧表格对象。
我想在这里放一小段代码,但我希望从简历中能够很容易地理解,因为我的代码稍微大一些。
尝试在更改后调用'panel.validate()'。 – Jared
嘿,我忘了添加,但我打电话panel.revalidate()和面板与表显示。问题在于主窗口仍然以某种方式反而引用了旧表。还尝试在主窗口上调用revalidate()。 – user3495683
你试过验证()'...'验证()'从来没有为我工作过。而当你说它拥有旧的引用时,你的意思是显示旧的表(而不是新的表),还是你的意思是实际的对象包含旧表而不是新表? – Jared