2014-05-14 100 views
0

我有一个程序,以一个空面板开始,然后当我按下一个按钮,面板将被填充一些其他面板,其中包含的元素。如何清除面板?

但是,如果我再次按下按钮,它会一遍又一遍地重叠和堆叠,变得非常难看。

如何每次按下按钮时清除面板,使其不会重叠。 请注意,我已经使用removeAll()UpdateUI()而且没有任何工作。在这里,我的代码:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.ComponentOrientation; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.BorderFactory; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextField; 

public class Calculator extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JPanel NumberPanel = new JPanel(); 
    String[] ButtonString = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", ".", "+/-"}; 
    JButton ButtonArray[] = new JButton[ButtonString.length]; 
    JPanel OperationPanel = new JPanel(); 
    String[] OperationString = {"Erase", "Ac", "*", "/", "+", "-", "Ans", "="}; 
    JButton[] OperationArray = new JButton[OperationString.length]; 
    JTextField WritingZone = new JTextField(27); 
    JButton b1 = new JButton("Ok"); 
    JButton b2 = new JButton("Exit"); 
    double first = 0; 
    double second = 0; 
    double result = 0; 
    char operation = ' '; 

    Calculator() { 
     super("Project Wolverine"); 
     setLayout(new BorderLayout(5, 5)); 
     JPanel radio1 = new JPanel(); 
     final JRadioButton r1 = new JRadioButton("Simple Calculator"); 
     final JRadioButton r2 = new JRadioButton("Advanced Calculator"); 
     ButtonGroup g1 = new ButtonGroup(); 
     g1.add(r1); 
     g1.add(r2); 
     radio1.setLayout(new GridLayout(3, 1, 5, 5)); 
     radio1.add(r1); 
     radio1.add(r2); 
     radio1.setBorder(BorderFactory.createTitledBorder("Choose a calculator")); 
     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new GridLayout(1, 2, 5, 5)); 
     panel2.add(b1); 
     panel2.add(b2); 
     radio1.add(panel2); 
     add(BorderLayout.WEST, radio1); 
     final JPanel emptyPanel = new JPanel(); 
     emptyPanel.setVisible(false); 
     emptyPanel.setLayout(new FlowLayout()); 
     add(BorderLayout.EAST, emptyPanel); 

     b1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       emptyPanel.removeAll(); 
       if (e.getSource() == b1) { 

        if (r1.isSelected()) { 
         for (int a = 0; a < ButtonArray.length; a++) { 
          ButtonArray[a] = new JButton(ButtonString[a]); 
         } 
         NumberPanel.setLayout(new GridLayout(4, 3, 5, 5)); 
         for (int a = 0; a < ButtonArray.length; a++) { 
          NumberPanel.add(ButtonArray[a]); 
         } 

         for (int a = 0; a < OperationArray.length; a++) { 
          OperationArray[a] = new JButton(OperationString[a]); 
         } 
         OperationPanel.setLayout(new GridLayout(4, 2, 5, 5)); 
         for (int a = 0; a < OperationArray.length; a++) { 
          OperationPanel.add(OperationArray[a]); 
         } 

         JPanel Finalpanel = new JPanel(); 
         Finalpanel.setLayout(new FlowLayout()); 
         Finalpanel.add(NumberPanel); 
         Finalpanel.add(OperationPanel); 

         WritingZone.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
         WritingZone.setBorder(BorderFactory.createLoweredSoftBevelBorder()); 
         WritingZone.setEditable(false); 
         WritingZone.setBackground(Color.white); 
         JPanel TextPanel = new JPanel(); 
         TextPanel.add(WritingZone); 

         for (int a = 0; a < ButtonArray.length; a++) { 
          ButtonArray[a].addActionListener(new ActionListener() { 
           public void actionPerformed(ActionEvent e) { 
            for (int a = 0; a < ButtonArray.length - 1; a++) { 
             if (e.getSource() == ButtonArray[a]) { 
              String temp = WritingZone.getText(); 
              WritingZone.setText(temp + ButtonArray[a].getText()); 
             } 
            } 
           } 
          }); 
         } 
         ButtonArray[11].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           if (e.getSource() == ButtonArray[11]) { 
            StringBuilder temp = new StringBuilder(); 
            temp.append(WritingZone.getText()); 
            WritingZone.setText(""); 
            for (int a = 0; a < temp.length(); a++) { 
             if (temp.charAt(a) == '-') { 
              temp.deleteCharAt(a); 
              WritingZone.setText(temp.toString()); 
             } else { 
              WritingZone.setText("-" + temp.toString()); 
             } 
            } 
           } 
          } 
         }); 

         OperationArray[0].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           if (e.getSource() == OperationArray[0]) { 
            String temp = WritingZone.getText(); 
            String temp2 = ""; 
            WritingZone.setText(""); 
            for (int x = 0; x < temp.length() - 1; x++) { 
             temp2 += (Character.toString(temp.charAt(x))); 
            } 
            WritingZone.setText(temp2); 
           } 
          } 
         }); 

         OperationArray[1].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           if (e.getSource() == OperationArray[1]) { 
            WritingZone.setText(""); 
            first = 0; 
            second = 0; 
           } 
          } 
         }); 

         OperationArray[2].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation = OperationArray[2].getText().charAt(0); 
          } 
         }); 

         OperationArray[3].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation = OperationArray[3].getText().charAt(0); 
          } 
         }); 

         OperationArray[4].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation = OperationArray[4].getText().charAt(0); 
          } 
         }); 

         OperationArray[5].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation = OperationArray[5].getText().charAt(0); 
          } 
         }); 

         OperationArray[6].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           String temp = String.valueOf(result); 
           String temp2 = WritingZone.getText(); 
           WritingZone.setText(""); 
           WritingZone.setText(temp2 + "" + temp); 
          } 
         }); 

         OperationArray[7].addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 
           if (operation == '*') { 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result = (first * second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } else if (operation == '/') { 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            if (second < 0) { 
             result = (first/second); 
             String temp2 = String.valueOf(result); 
             WritingZone.setText(temp2); 

            } else if (second > 0) { 
             result = (first/second); 
             String temp2 = String.valueOf(result); 
             WritingZone.setText(temp2); 

            } else if (second == 0) { 
             WritingZone.setText("Error! Can't divide by 0"); 
            } 
           } else if (operation == '+') { 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result = (first + second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } else if (operation == '-') { 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result = (first - second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } 
          } 
         }); 

         final JPanel AllPanel = new JPanel(); 
         AllPanel.setLayout(new BorderLayout(5, 5)); 
         AllPanel.add(BorderLayout.NORTH, TextPanel); 
         AllPanel.add(BorderLayout.CENTER, Finalpanel); 
         AllPanel.setBorder(BorderFactory.createTitledBorder("Simple Calculator")); 
         emptyPanel.add(AllPanel); 
         emptyPanel.setVisible(true); 
         pack(); 

        } 
       } 
      } 

     }); 

     b2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (e.getSource() == b2) { 
        System.exit(0); 
       } 
      } 
     }); 
    } 

    public static void main(String[] arg) { 

     JFrame frame = new Calculator(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setResizable(false); 
    } 
} 

回答

1

开始采取看看一些所涉及的板...

NumberPanelOperationPanelWritingZone这是实例变量和emptyPane这是一个final局部变量。

这些都需要“清除”或重新创建。

一个简单的解决办法是有emptyPane作为唯一的实例变量和简单的调用emptyPane.removeAll()每到ActionListener被触发,但因为它的立场,你将不得不调用removeAll在每个前面提到的面板,例如...

public void actionPerformed(ActionEvent e) { 
    emptyPanel.removeAll(); 
    NumberPanel.removeAll(); 
    OperationPanel.removeAll(); 
    WritingZone.setText(null); 

现在,就个人而言,我将通过创建一个BasicCalculatorPaneAdvancedCalculatorPane开始。每个包含所需的用户界面元素和逻辑,使他们工作。然后,当用户在它们之间进行选择时,删除屏幕上的计算器窗格,并创建所需计算器的新实例并添加它。同样,你可以保持达到的一个实例,但提供了一个“重置”选项,这将让你重新设置界面,但将节省您不必创建这些面板的多个实例

+0

它工作。如你所说,得到了我期待的结果。 – Javabeginner

+0

很高兴帮助... – MadProgrammer

1

试试这个

yourPanel.getContentPane().removeAll();//clean main screen Frame 
yourPanel.add(newContent);//add the desire Panel 
yourPanel.revalidate(); 
+0

考虑到OP调用'pack','validate'是无用的,除此之外,通常'revalidate'更有用;) – MadProgrammer

0

请试试这个

public class Calculator extends JFrame implements ActionListener{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JPanel NumberPanel = new JPanel(); 
    String [] ButtonString = {"7","8","9","4","5","6","1","2","3","0",".","+/-"}; 
    JButton ButtonArray [] = new JButton[ButtonString.length]; 
    JPanel OperationPanel = new JPanel(); 
    String [] OperationString = {"Erase","Ac","*","/","+","-","Ans","="}; 
    JButton [] OperationArray = new JButton [OperationString.length]; 
    JTextField WritingZone = new JTextField(27); 
    JButton b1 = new JButton("Ok"); 
    JButton b2 = new JButton("Exit"); 
    double first = 0; 
    double second = 0; 
    double result = 0; 
    char operation = ' '; 
    Calculator(){ 
     super("Project Wolverine"); 
     setLayout(new BorderLayout(5,5)); 
     JPanel radio1 = new JPanel(); 
     final JRadioButton r1 = new JRadioButton("Simple Calculator"); 
     final JRadioButton r2 = new JRadioButton("Advanced Calculator"); 
     ButtonGroup g1 = new ButtonGroup(); 
     g1.add(r1); 
     g1.add(r2); 
     radio1.setLayout(new GridLayout (3,1,5,5)); 
     radio1.add(r1); 
     radio1.add(r2); 
     radio1.setBorder(BorderFactory.createTitledBorder("Choose a calculator")); 
     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new GridLayout(1,2,5,5)); 
     panel2.add(b1); 
     panel2.add(b2); 
     radio1.add(panel2); 
     add(BorderLayout.WEST, radio1); 
     final JPanel emptyPanel = new JPanel(); 
     emptyPanel.setVisible(false); 
     emptyPanel.setLayout(new FlowLayout()); 
     add(BorderLayout.EAST, emptyPanel); 


     b1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 

       if (e.getSource()==b1){ 

       if (r1.isSelected()){ 
        for (int a = 0 ; a < ButtonArray.length ; a++){ 
         ButtonArray[a]= new JButton (ButtonString[a]); 
        } 
        NumberPanel.removeAll(); 
        NumberPanel.setLayout(new GridLayout(4,3,5,5)); 
        for (int a = 0 ; a < ButtonArray.length ; a++){ 
         NumberPanel.add(ButtonArray[a]); 
        } 

        for (int a = 0 ; a < OperationArray.length ; a++){ 
         OperationArray[a]= new JButton(OperationString[a]); 
        } 
        OperationPanel.removeAll(); 
        OperationPanel.setLayout(new GridLayout(4,2,5,5)); 
        for (int a = 0 ; a < OperationArray.length ; a++){ 
         OperationPanel.add(OperationArray[a]); 
        } 

        JPanel Finalpanel = new JPanel(); 
        Finalpanel.setLayout(new FlowLayout()); 
        Finalpanel.add(NumberPanel);Finalpanel.add(OperationPanel); 


        WritingZone.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
        WritingZone.setBorder(BorderFactory.createLoweredSoftBevelBorder()); 
        WritingZone.setEditable(false); 
        WritingZone.setBackground(Color.white); 
        JPanel TextPanel = new JPanel(); 
        TextPanel.add(WritingZone); 


        for(int a = 0 ; a < ButtonArray.length; a++){ 
         ButtonArray[a].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           for (int a = 0; a < ButtonArray.length-1; a++){ 
            if(e.getSource()==ButtonArray[a]){ 
             String temp = WritingZone.getText(); 
             WritingZone.setText(temp+ButtonArray[a].getText()); 
            } 
           } 
          } 
         }); 
        } 
        ButtonArray[11].addActionListener(new ActionListener(){ 
         public void actionPerformed(ActionEvent e){ 
          if(e.getSource()==ButtonArray[11]){ 
           StringBuilder temp = new StringBuilder(); 
           temp.append(WritingZone.getText()); 
           WritingZone.setText(""); 
           for (int a = 0; a < temp.length(); a++){ 
            if (temp.charAt(a)=='-'){ 
             temp.deleteCharAt(a); 
             WritingZone.setText(temp.toString()); 
            } 
            else{ 
             WritingZone.setText("-"+temp.toString()); 
            } 
           } 
          } 
         } 
        }); 


         OperationArray[0].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           if(e.getSource()==OperationArray[0]){ 
            String temp = WritingZone.getText(); 
            String temp2 = ""; 
            WritingZone.setText(""); 
            for (int x = 0 ; x < temp.length()-1 ; x++){ 
             temp2+=(Character.toString(temp.charAt(x))); 
            } 
            WritingZone.setText(temp2); 
           } 
          } 
         }); 

         OperationArray[1].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           if (e.getSource()==OperationArray[1]){ 
            WritingZone.setText(""); 
            first = 0; 
            second = 0; 
           } 
          } 
         }); 

         OperationArray[2].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation=OperationArray[2].getText().charAt(0); 
          } 
         }); 

         OperationArray[3].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation=OperationArray[3].getText().charAt(0); 
          } 
         }); 

         OperationArray[4].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation=OperationArray[4].getText().charAt(0); 
          } 
         }); 

         OperationArray[5].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           first = Double.valueOf(WritingZone.getText()); 
           WritingZone.setText(""); 
           operation=OperationArray[5].getText().charAt(0); 
          } 
         }); 

         OperationArray[6].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           String temp = String.valueOf(result); 
           String temp2 = WritingZone.getText(); 
           WritingZone.setText(""); 
           WritingZone.setText(temp2+""+temp); 
          } 
         }); 


         OperationArray[7].addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent e){ 
           if (operation=='*'){ 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result=(first*second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } 
           else if(operation=='/'){ 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            if(second<0){ 
             result=(first/second); 
             String temp2 = String.valueOf(result); 
             WritingZone.setText(temp2); 

            } 
            else if (second>0){ 
             result=(first/second); 
             String temp2 = String.valueOf(result); 
             WritingZone.setText(temp2); 

            } 
            else if (second==0) 
             WritingZone.setText("Error! Can't divide by 0"); 
           } 
           else if (operation=='+'){ 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result=(first+second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } 
           else if (operation=='-'){ 
            String temp = WritingZone.getText(); 
            WritingZone.setText(""); 
            second = Double.valueOf(temp); 
            result=(first-second); 
            String temp2 = String.valueOf(result); 
            WritingZone.setText(temp2); 
           } 
          } 
         }); 




        final JPanel AllPanel = new JPanel(); 
        AllPanel.setLayout(new BorderLayout(5,5)); 
        AllPanel.add(BorderLayout.NORTH, TextPanel); 
        AllPanel.add(BorderLayout.CENTER, Finalpanel); 
        AllPanel.setBorder(BorderFactory.createTitledBorder("Simple  Calculator")); 
        emptyPanel.removeAll(); 
        emptyPanel.add(AllPanel); 
        emptyPanel.setVisible(true); 
        pack(); 


      }} 
     } 



     }); 

     b2.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       if(e.getSource()==b2) 
        System.exit(0); 
      } 
     });} 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // TODO Auto-generated method stub 

    } 
    public static void main (String [] arg){ 






    JFrame frame = new Calculator(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.pack(); 
    frame.setResizable(false);}} 

刚刚从emptyPanel,NumberPanel删除所有组件,OperationPanel

emptyPanel.removeAll(); 
NumberPanel.removeAll(); 
OperationPanel.removeAll();