Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTabbedPane选项卡之间切换时更新JButtons的问题_Java_Swing_Jbutton_Jtabbedpane_Changelistener - Fatal编程技术网

Java 在JTabbedPane选项卡之间切换时更新JButtons的问题

Java 在JTabbedPane选项卡之间切换时更新JButtons的问题,java,swing,jbutton,jtabbedpane,changelistener,Java,Swing,Jbutton,Jtabbedpane,Changelistener,因此,我遇到的问题可能最容易在图片中显示: 第一张图片是游戏板的一张快照 这些方块中的每一个都是“绘图”按钮 单击绘图显示上方的某个JButtons(即“购买-生产”),相关操作将发生: 到目前为止,一切顺利 但是,在切换到其他选项卡(“商品”或“帮助”)并切换回“游戏”选项卡时,我只能做到这一点: 我的想法是,我在购买农产品后更新绘图显示的步骤应该可以在切换选项卡后更新显示,但事实并非如此 以下是我在购买农产品时用于更新显示的代码: buyProduce.addMouseListener(n

因此,我遇到的问题可能最容易在图片中显示:

第一张图片是游戏板的一张快照

这些方块中的每一个都是“绘图”按钮

单击绘图显示上方的某个JButtons(即“购买-生产”),相关操作将发生:

到目前为止,一切顺利

但是,在切换到其他选项卡(“商品”或“帮助”)并切换回“游戏”选项卡时,我只能做到这一点:

我的想法是,我在购买农产品后更新绘图显示的步骤应该可以在切换选项卡后更新显示,但事实并非如此

以下是我在购买农产品时用于更新显示的代码:

buyProduce.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            try {
                buyProduce();
                plot_panel.removeAll();
                createPlots();
                labelStore.get("Cash_Label").setText(game.roundedWorth());
            } catch (IOException e) {
                e.printStackTrace();
            } catch (BankruptException e) {
                JOptionPane.showMessageDialog(frame,
                        "Bankrupt after attempt to purchase Produce");
            }
        }
    });
我试着用选项卡窗格上的ChangeListener来实现这一点,结果打印显示变为“空白”,如第3张图片所示

tabbedPane.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent arg0) {
            plot_panel.removeAll();
            createPlots();
        }

    });
但是,在我通过显示器上方的一个按钮执行更新显示器的操作之前,显示器只是这样的“空白”

例如,如果显示为“空白”或“购买农产品”,则所有内容都会按其应有的方式显示

这里有谁能从我的帖子中看出哪里出了问题,哪里出了问题

如果需要的话,我很乐意发布更多的代码,但我认为我应该尽可能地保持整洁

提前感谢,, 道格

编辑:我不想把人们的时间浪费在一个糟糕的MCVE上,所以这里有一个链接,指向一个压缩文件夹,里面有所有的东西


如果人们不想浏览,那么我会尝试切换到JTable。

当从plot\u面板中删除并重新创建时,请调用

plot_panel.updateUI();

删除和添加组件后,应重新验证并重新绘制绘图面板。但我几乎想说,也许我们应该寻找一种不同的设计,但只是没有足够的信息可以提供。只是尝试在plot_panel.revalidate和plot_panel.repaint之后插入plot_panel.removeAll;在创造情节之后;然后两者都有,但没有变化。我应该在OP中粘贴我相当大的类,还是像PasteBin这样的外部类?要获得更好的帮助,请发布一篇文章。它只是一个小小的代码。y考虑过使用JTable吗?@MadProgrammer我没有做过,没有;我最初的计划是让绘图“可点击”——以获取它们的坐标——我认为JButton或JLabel是最简单的方法。如果我不能让这个更新工作,那么我可能会改成JTable,假设你可以在每个单元格中显示不同的图片?updateUI可能是你可以使用的最糟糕的方法,它与让UI更新它的布局和让组件重新加载它的外观状态几乎没有关系,这是非常低效的。正如@peeskillet所述,OP可能需要调用revalidate,然后重新绘制