2013-02-26 41 views
1

当我单击按钮时,我想向面板添加一个按钮,但是我的程序不像以前那样工作。这是我的程序之前:JButton在JPanel重新验证后将两次setText改写为JLabel()

enter image description here

与粉红色按钮南面板cardlayout面板。当我点击东部的灰色按钮时,卡面板改变了。当我点击粉色按钮,发生这种情况:

enter image description here

一个粉红色按钮的setText一个标签。之后,我加入一个按钮CardPanel都“TOPLI NAPICI”这个事情发生了:

enter image description here

正如你可以看到,一键式“摩卡”添加到面板上,这是我想要的,但是当我点击一个按钮,它的setText两次,只有新按钮(在这种情况下“MOKA”)setText一次。这也正好与其他面板在CardPanel都:

enter image description here

这是我的代码,当我点击按钮添加新的按钮

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点击它的一部分两次。可能吗?尽管我在cardlayout(“TOPLI NAPICI”)中只更改了一个面板,但它在所有面板中都在cardlayout(“SOKOVI”和“ALKOHOL”)中更改了 出了什么问题?

感谢您的任何帮助。

+0

什么你正在采取什么行动?如果确实与注册点击次数有关,那么我建议使用mouseUp事件。 – CosminO 2013-02-26 11:43:38

+1

我认为你的GUI应该完全重新设计。您可以使用JTabbedPane(在SOUTH上设置)和3个选项卡,并在每个选项卡中设置“JTable”(适用于各种类型的饮料),而不是使用此GUI会导致很多问题。每个'JTable'都会包含文章列表。然后,您可以添加一些按钮,以便您可以将文章添加到您的帐单。另外,一个'JTable'可以替换所有的'JLabel'和'JComboBox'。顺便说一句,如何打印报告? – 2013-02-26 14:16:27

+0

你说得对。当我从这开始时,我有想法,但没有经验。我可以将表格设置为空并通过单击按钮进行填充。我的程序看起来与表格相同,而不是标签,组合框....? – Mikky 2013-02-26 19:42:31

回答

2
  • 不知道什么是用来布局管理,没有谈论CardLayout,为更好地帮助越早张贴SSCCE,短,可运行,编译,只是的JPanel与CardLayout和一个JButton的用于张贴在这里的代码,

  • 张贴在这里没有代码

    图像默认情况下不会永远需要呼吁revalidate() & repaint()帮助

  • CardLayout,所有的通报人在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日。容器在哪里进行了更改,或者如果改变了几个容器,那么就打电话给他们1。第一接合容器

  • 高达Java7使用validate() & repaint()JFrameJDialogJWindow是必需的,在Java7被实现为revalidate()Top Level Containers ,,一样的JPanel(例如)