我正在整理一个Swing应用程序,我常常想要替换JPanel的内容.要做到这一点,我正在打电话removeAll(),然后添加我的新内容,然后打电话revalidate().
但是我发现旧内容仍然可见(虽然被新内容遮挡了).如果我添加调用repaint()除revalidate(),它按预期工作.
我确信在其他场合我经历过只是打电话revalidate()就足够了.
所以基本上我的问题是 - 我是否需要调用这两个函数,如果没有,我什么时候应该调用它们?
我有一个JTabbedPane,其选项卡中包含三个表.的JTabbedPane,再次,是在JScrollPane.我想{"Client", "Action", "Location", "Value"}为每个表显示一个修复表头,它遵循模式.当我试图设置标题时ActionListener(见下文),我可以自由地使用其他方法(例如,最初设置标题).
其他SO帖子也解决了同样的问题,但我无法显示表头.唯一有效的方法是在上述表格中添加数据ActionListener.我不明白为什么标题没有显示,因为我将数据以String-matrix的形式与String表示标题的-array一起传递.
首先,这里是关于我的表的代码片段,它在GUI启动时执行(my initialize()-method).
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
tabbedPane.setFont(new Font("Carlito", Font.PLAIN, 13));
tabbedPane.setBackground(Color.WHITE);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tableBefore = new JTable();
tabbedPane.addTab(descrTableBefore, null, tableBefore, null);
tableBefore.setFont(new Font("Carlito", Font.PLAIN, 13));
tableBefore.setFocusable(false);
tableMainTest = new JTable();
tabbedPane.addTab(descrTableMain, null, tableMainTest, null);
tabbedPane.setEnabledAt(1, true);
tableMainTest.setFont(new Font("Carlito", Font.PLAIN, 13));
tableMainTest.setFocusable(false);
tableAfter = new JTable();
tabbedPane.addTab(descrTableAfter, null, tableAfter, null);
tableAfter.setFont(new Font("Carlito", Font.PLAIN, 13)); …Run Code Online (Sandbox Code Playgroud)