2014-05-14 3 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

시작 ...

NumberPanel, OperationPanel, 인스턴스 변수 WritingZoneemptyPanefinal 지역 변수는 다음과 같습니다 여기, 내 코드이야 .

이들 각각은 "지워지거나"다시 만들어야합니다.

간단한 해결책은 트리거되는 ActionListener의 유일한 인스턴스 변수와 간단한 전화 emptyPane.removeAll() 각으로 emptyPane을하는 것입니다,하지만 약자로, 당신은 앞서 예시 한 각 패널에 removeAll를 호출해야 할거야 예를 들어 ...

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

지금, 개인적으로, 나는 BasicCalculatorPaneAdvancedCalculatorPane를 작성하여 시작합니다. 각각은 필요한 UI 요소와 로직을 포함하고 있습니다. 그런 다음 사용자가 그 중 하나를 선택하면 화면에 계산기 칸이 무엇인지 제거하고 필요한 계산기의 새 인스턴스를 만들고 추가하십시오. 마찬가지로, 당신은 손의 단일 인스턴스를 유지하지만 인터페이스를 재설정 할 수 것 "재설정"옵션을 제공하지만,

+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'는 irrlevent이고, 게다가'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에서 모든 구성 요소를 제거

emptyPanel.removeAll(); 
NumberPanel.removeAll(); 
OperationPanel.removeAll(); 
,691,363 OperationPanel을 시도하십시오210
관련 문제