1

当我单击按钮时,我想在面板中添加一个按钮,我做到了,但我的程序不像以前那样工作。这是我之前的程序:

在此处输入图像描述

带有粉红色按钮的南面板是卡片布局面板。当我点击东边的灰色按钮时,卡片面板发生了变化。当我单击粉红色按钮时,发生了这种情况:

在此处输入图像描述

一个粉色按钮 setText 到一个标签。在我向卡片面板“TOPLI NAPICI”添加一个按钮后,发生了这种情况:

在此处输入图像描述

如您所见,一个按钮“moka”添加到我想要的面板中,但是当我单击一个按钮时,它 setText 两次,只有新按钮(在本例中为“MOKA”) setText 一次。卡片面板中的其他面板也发生了这种情况:

在此处输入图像描述

当我单击按钮添加新按钮时,这是我的代码的一部分

    if (enter == JOptionPane.OK_OPTION) {
    try{
    Double price1=Double.parseDouble(priceField.getText());

    String name1= productField.getText();


        Product name = new Product(name1, price1);
        Application .manu.add(name);


        if (field.getSelectedItem().equals("TOPLI  NAPICI")){

            for(Controller c:Controller) {
            c.tnp.add(new JButton(name1));//c is panel , holds all panels

         c.tn.revalidate();//c.tn is panel which is changed( adding one button), cardpanel
         c.removeAll();
         c.panels();//create all panels which is removed
             c.revalidate();


    System.out.print( c.tnp.size());//tnp is a list with buttons, shows that add one more button, that is correct

        }

喜欢它复制面板,或者当我click button单击两次时。是否可以?虽然我只更改了卡片布局中的一个面板(“TOPLI NAPICI”),但它在卡片布局中的所有面板中都发生了变化(“SOKOVI”和“ALKOHOL”)有什么问题?

谢谢你的帮助。

4

1 回答 1

2
  • 不知道使用了什么 LayoutManager,没有谈论 CardLayout,为了更好的帮助,尽快发布 SSCCE,简短,可运行,可编译,只是关于带有 CardLayout 的 JPanel 和一个用于此处发布的代码的 JButton,

  • 在此处发布的没有代码的图像没有帮助

  • CardLayout 默认不需要调用revalidate() & repaint(),所有这些通知器默认在 API 中实现

  • 这不是正确的方法

.

c.tn.revalidate();//c.tn is panel which is changed( adding one button), cardpanel
c.removeAll();
c.panels();//create all panels which is removed
c.revalidate();
  • 将所有更改应用于已经可见的 GUI(删除、添加、修改、重新布局),然后最后两行代码应该是revalidate() & repaint(),对于第一个。容器在哪里完成更改,或者如果更改了几个容器,则调用它们的 1.st 加入容器

  • validate() & repaint()for JFrame, JDialog, JWindow, 在 Java7 中也实现了revalidate()for Top Level Containers, 和 for 相同JPanel(例如)

于 2013-02-26T11:57:22.850 回答