有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何清除面板?

我有一个程序,它以一个空面板开始,然后当我按下一个按钮时,面板将被其他包含元素的面板填充

但如果我再按一次按钮,它就会一次又一次地叠起来,变成非常丑陋的东西

如何在每次按下按钮时清除面板,使其不会重叠。 请注意,我使用了removeAll(){},但没有一个有效。这是我的代码:

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);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    请试试这个

    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.removeAll();
    NumberPanel.removeAll();
    OperationPanel.removeAll();
    
  2. # 2 楼答案

    首先看一看涉及的一些面板

    NumberPanelOperationPanelWritingZone是实例变量和emptyPanefinal局部变量

    每一个都需要“清除”或重新创建

    一个简单的解决方案是将emptyPane作为唯一的实例变量,并触发对ActionListener的每个emptyPane.removeAll()的简单调用,但就目前情况而言,您必须在前面提到的每个面板上调用removeAll,例如

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

    现在,就我个人而言,我将首先创建一个BasicCalculatorPane和一个AdvancedCalculatorPane。每个都包含使其工作所需的UI元素和逻辑。然后,当用户在它们之间进行选择时,删除屏幕上的任何计算器窗格,创建所需计算器的新实例并添加它。同样,您可以维护一个reach实例,但提供一个“重置”选项,该选项允许您重置接口,但不必创建这些面板的更多实例

  3. # 3 楼答案

    试试这个

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