繁体   English   中英

为什么我的JPanel不显示在JFrame上?

[英]Why is my JPanel not showing on a JFrame?

我已经通过参考其他人的源代码制作了一个计算器,但是当我尝试编译该文件时,将显示该框架,离开面板,仅显示空白框架。 我使用一个基本的frame.add(new Calculator()); 文件中的方法。 这是代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Calculator2 extends JFrame {
    public static void main(String[]args) {
        JFrame frame = new JFrame("Test Calculator");
        Windows c = new Windows();
        c.setVisible(true);
        frame.add(c);
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
class Windows extends JPanel {
    static boolean[] function = new boolean[4];
    static double[] temporary = {0, 0}; 
    static JTextArea display = new JTextArea(1,20);

    public static JPanel Windows() {
        JPanel panel = new JPanel();
        panel.setSize(200, 300);
        GridLayout grid = new GridLayout(5, 5);
        panel.setLayout(grid);

        JPanel[] row = new JPanel[5];
        JButton[] buttons = new JButton[19];
        String[] buttonString = {"7","8","9","+",
                                 "4", "5", "6", "-",
                                 "1", "2", "3", "*",
                                 ".", "/", "C", "v",
                                 "+/-", "=", "0"};
        int[] dimW = {300, 45, 100, 90};
        int[] dimH = {35, 40};
        Dimension dispDim = new Dimension(dimW[0], dimH[0]);
        Dimension regDim = new Dimension(dimW[1], dimH[1]);
        Dimension rColDim = new Dimension(dimW[2], dimH[1]);
        Dimension zeroButDim = new Dimension(dimW[3], dimH[1]);
        Font font = new Font("Times new Roman", Font.BOLD, 14);

        for(int i = 0; i < 4; i++)
            function[i] = false;

        FlowLayout f1 = new FlowLayout(FlowLayout.CENTER);
        FlowLayout f2 = new FlowLayout(FlowLayout.CENTER, 1, 1);
        for(int x = 0; x < 5; x++)
            row[x] = new JPanel();
        row[0].setLayout(f1);
        for(int x = 0; x < 5; x++)
            row[x].setLayout(f2);

        for(int i = 0; i < 19; i++) {
            buttons[i] = new JButton();
            buttons[i].setText(buttonString[i]);
            buttons[i].setFont(font);
            buttons[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent b) {
                    if(b.getSource() == buttons[0])
                        display.append("7");
                    if(b.getSource() == buttons[1])
                        display.append("8");
                    if(b.getSource() == buttons[2])
                        display.append("9");
                    if(b.getSource() == buttons[3]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[0] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[4])
                        display.append("4");
                    if(b.getSource() == buttons[5])
                        display.append("5");
                    if(b.getSource() == buttons[6])
                        display.append("6");
                    if(b.getSource() == buttons[7]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[1] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[8])
                        display.append("1");
                    if(b.getSource() == buttons[9])
                        display.append("2");
                    if(b.getSource() == buttons[10])
                        display.append("3");
                    if(b.getSource() == buttons[11]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[2] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[12])
                        display.append(".");
                    if(b.getSource() == buttons[13]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[3] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[14])
                        clear();
                    if(b.getSource() == buttons[15])
                        getSqrt();
                    if(b.getSource() == buttons[16])
                        getResult();
                    if(b.getSource() == buttons[17])
                        display.append("0");
                }
            });
        }

        display.setFont(font);          
        display.setEditable(false);
        display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        display.setPreferredSize(dispDim);
        for(int i = 0; i < 14; i++)
            buttons[i].setPreferredSize(regDim);
        for(int i = 14; i < 18; i++) 
            buttons[i].setPreferredSize(rColDim);
        buttons[18].setPreferredSize(zeroButDim);

        row[0].add(display);
        panel.add(row[0]);

        for(int i = 0; i < 4; i++)
            row[1].add(buttons[i]);
        row[1].add(buttons[14]);
        panel.add(row[1]);

        for(int i = 4; i < 8; i++)
            row[2].add(buttons[i]);
        row[2].add(buttons[15]);
        panel.add(row[2]);

        for(int i = 8; i < 12; i++)
            row[3].add(buttons[i]);
        row[3].add(buttons[16]);
        panel.add(row[3]);

        row[4].add(buttons[18]);
        for(int i = 12; i < 14; i++)
            row[4].add(buttons[i]);
        row[4].add(buttons[17]);
        panel.add(row[4]);

        panel.setVisible(true);

        return panel;
    }

    public static void clear() {
        try {
            display.setText("");
            for(int i = 0; i < 4; i++)
                function[i] = false;
            for(int i = 0; i < 2; i++)
                temporary[i] = 0;
        } catch(NullPointerException e) {
        }
    }
    public static void getSqrt() {
        try {
            double value = Math.sqrt(Double.parseDouble(display.getText()));
            display.setText(Double.toString(value));
        } catch(NumberFormatException e) {
        }
    }
    public static void getPosNeg() {
        try {
            double value = Double.parseDouble(display.getText());
            if(value != 0) {
                value = value * (-1);
                display.setText(Double.toString(value));
            }
            else {
            }
        } catch(NumberFormatException e) {
        }
    }
    public static void getResult() {
        double result = 0;
        temporary[1] = Double.parseDouble(display.getText());
        String temp0 = Double.toString(temporary[0]);
        String temp1 = Double.toString(temporary[1]);
        try {
            if(temp0.contains("-")) {
                String[] temp00 = temp0.split("-", 2);
                temporary[0] = (Double.parseDouble(temp00[1]) *-1);
            }
            if(temp1.contains("-")) {
                String[] temp11 = temp1.split("-", 2);
                temporary[1] = (Double.parseDouble(temp11[1]) * -1);
            }
        } catch(ArrayIndexOutOfBoundsException e) {
        }
        try {
            if(function[2] == true)
                result = temporary[0] * temporary[1];
            else if(function[3] == true)
                result = temporary[0] / temporary[1];
            else if(function[0] == true)
                result = temporary[0] + temporary[1];
            else if(function[1] == true)
                result = temporary[0] - temporary[1];
            display.setText(Double.toString(result));
            for(int i = 0; i < 4; i++)
                function[i] = false;
        } catch(NumberFormatException e) {
        }
    }
    public final void setDesign() {
        try {
            UIManager.setLookAndFeel(
                    "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception e) {
        }
    }
    public static void main(String[] args) {
        JPanel pane = new JPanel();
        pane.add(Windows());
        pane.setSize(500, 500);
        pane.setVisible(true);
    }
}

修正:必须更改Windows c = new Windows(); JPanel c = Windows.Windows(); 因为它是返回JPanel的方法,而不是构造函数。 致谢:@EdwinTorres和@DirkyJerky

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Calculator2 extends JFrame {
    public static void main(String[]args) {
        JFrame frame = new JFrame("Test Calculator");
        Windows c = new Windows();
        c.setVisible(true);
        frame.add(c);
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
class Windows extends JPanel {
    static boolean[] function = new boolean[4];
    static double[] temporary = {0, 0}; 
    static JTextArea display = new JTextArea(1,20);

    public static JPanel Windows() {
        JPanel panel = new JPanel();
        panel.setSize(200, 300);
        GridLayout grid = new GridLayout(5, 5);
        panel.setLayout(grid);

        JPanel[] row = new JPanel[5];
        JButton[] buttons = new JButton[19];
        String[] buttonString = {"7","8","9","+",
                                 "4", "5", "6", "-",
                                 "1", "2", "3", "*",
                                 ".", "/", "C", "v",
                                 "+/-", "=", "0"};
        int[] dimW = {300, 45, 100, 90};
        int[] dimH = {35, 40};
        Dimension dispDim = new Dimension(dimW[0], dimH[0]);
        Dimension regDim = new Dimension(dimW[1], dimH[1]);
        Dimension rColDim = new Dimension(dimW[2], dimH[1]);
        Dimension zeroButDim = new Dimension(dimW[3], dimH[1]);
        Font font = new Font("Times new Roman", Font.BOLD, 14);

        for(int i = 0; i < 4; i++)
            function[i] = false;

        FlowLayout f1 = new FlowLayout(FlowLayout.CENTER);
        FlowLayout f2 = new FlowLayout(FlowLayout.CENTER, 1, 1);
        for(int x = 0; x < 5; x++)
            row[x] = new JPanel();
        row[0].setLayout(f1);
        for(int x = 0; x < 5; x++)
            row[x].setLayout(f2);

        for(int i = 0; i < 19; i++) {
            buttons[i] = new JButton();
            buttons[i].setText(buttonString[i]);
            buttons[i].setFont(font);
            buttons[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent b) {
                    if(b.getSource() == buttons[0])
                        display.append("7");
                    if(b.getSource() == buttons[1])
                        display.append("8");
                    if(b.getSource() == buttons[2])
                        display.append("9");
                    if(b.getSource() == buttons[3]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[0] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[4])
                        display.append("4");
                    if(b.getSource() == buttons[5])
                        display.append("5");
                    if(b.getSource() == buttons[6])
                        display.append("6");
                    if(b.getSource() == buttons[7]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[1] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[8])
                        display.append("1");
                    if(b.getSource() == buttons[9])
                        display.append("2");
                    if(b.getSource() == buttons[10])
                        display.append("3");
                    if(b.getSource() == buttons[11]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[2] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[12])
                        display.append(".");
                    if(b.getSource() == buttons[13]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[3] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[14])
                        clear();
                    if(b.getSource() == buttons[15])
                        getSqrt();
                    if(b.getSource() == buttons[16])
                        getResult();
                    if(b.getSource() == buttons[17])
                        display.append("0");
                }
            });
        }

        display.setFont(font);          
        display.setEditable(false);
        display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        display.setPreferredSize(dispDim);
        for(int i = 0; i < 14; i++)
            buttons[i].setPreferredSize(regDim);
        for(int i = 14; i < 18; i++) 
            buttons[i].setPreferredSize(rColDim);
        buttons[18].setPreferredSize(zeroButDim);

        row[0].add(display);
        panel.add(row[0]);

        for(int i = 0; i < 4; i++)
            row[1].add(buttons[i]);
        row[1].add(buttons[14]);
        panel.add(row[1]);

        for(int i = 4; i < 8; i++)
            row[2].add(buttons[i]);
        row[2].add(buttons[15]);
        panel.add(row[2]);

        for(int i = 8; i < 12; i++)
            row[3].add(buttons[i]);
        row[3].add(buttons[16]);
        panel.add(row[3]);

        row[4].add(buttons[18]);
        for(int i = 12; i < 14; i++)
            row[4].add(buttons[i]);
        row[4].add(buttons[17]);
        panel.add(row[4]);

        panel.setVisible(true);

        return panel;
    }

    public static void clear() {
        try {
            display.setText("");
            for(int i = 0; i < 4; i++)
                function[i] = false;
            for(int i = 0; i < 2; i++)
                temporary[i] = 0;
        } catch(NullPointerException e) {
        }
    }
    public static void getSqrt() {
        try {
            double value = Math.sqrt(Double.parseDouble(display.getText()));
            display.setText(Double.toString(value));
        } catch(NumberFormatException e) {
        }
    }
    public static void getPosNeg() {
        try {
            double value = Double.parseDouble(display.getText());
            if(value != 0) {
                value = value * (-1);
                display.setText(Double.toString(value));
            }
            else {
            }
        } catch(NumberFormatException e) {
        }
    }
    public static void getResult() {
        double result = 0;
        temporary[1] = Double.parseDouble(display.getText());
        String temp0 = Double.toString(temporary[0]);
        String temp1 = Double.toString(temporary[1]);
        try {
            if(temp0.contains("-")) {
                String[] temp00 = temp0.split("-", 2);
                temporary[0] = (Double.parseDouble(temp00[1]) *-1);
            }
            if(temp1.contains("-")) {
                String[] temp11 = temp1.split("-", 2);
                temporary[1] = (Double.parseDouble(temp11[1]) * -1);
            }
        } catch(ArrayIndexOutOfBoundsException e) {
        }
        try {
            if(function[2] == true)
                result = temporary[0] * temporary[1];
            else if(function[3] == true)
                result = temporary[0] / temporary[1];
            else if(function[0] == true)
                result = temporary[0] + temporary[1];
            else if(function[1] == true)
                result = temporary[0] - temporary[1];
            display.setText(Double.toString(result));
            for(int i = 0; i < 4; i++)
                function[i] = false;
        } catch(NumberFormatException e) {
        }
    }
    public final void setDesign() {
        try {
            UIManager.setLookAndFeel(
                    "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception e) {
        }
    }
    public static void main(String[] args) {
        JPanel pane = new JPanel();
        pane.add(Windows());
        pane.setSize(500, 500);
        pane.setVisible(true);
    }
}

(可能不正确)

当你做 pane.add(Windows()); 它为Windows clas构造函数(因为该方法是静态的),而不是您要查找的 public static JPanel Windows()方法。

编辑: 尝试: pane.add(Windows.Windows())

public static JPanel Windows() {是一个 方法 ,在 Windows c = new Windows(); 您正在调用 构造函数 (不执行任何操作),而不是所要查找的方法。

public static JPanel Windows()更改为 public Windows()

双重编辑:

只需将public static JPanel Windows()更改为public static JPanel newWindows()即可修复编译器警告,

并更改Windows c = new Windows(); JPanel c = Windows.newWindows();

您将Windows()定义为静态方法,而不是构造函数。 因此,您需要正确调用它。

在第10行上,您需要执行以下操作:

frame.add(Windows.Windows()); 

在第28行,将其设置为final:

final JButton[] buttons = new JButton[19];

我做了一些重构,您的Windows类缺少构造函数(我想应该是它的静态Windows()方法)。

这应该工作。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator2 implements Runnable {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Calculator2());
    }

    @Override
    public void run() {
        JFrame f = new JFrame();
        Windows c = new Windows();
        c.setVisible(true);
        f.add(c);
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
class Windows extends JPanel {
    static boolean[] function = new boolean[4];
    static double[] temporary = {0, 0}; 
    static JTextArea display = new JTextArea(1,20);

    public Windows() {
        super(new GridLayout(5, 5));
        this.setSize(200, 300);
        GridLayout grid = new GridLayout(5, 5);
        this.setLayout(grid);

        JPanel[] row = new JPanel[5];
        final JButton[] buttons = new JButton[19];
        String[] buttonString = {"7","8","9","+",
                                 "4", "5", "6", "-",
                                 "1", "2", "3", "*",
                                 ".", "/", "C", "v",
                                 "+/-", "=", "0"};
        int[] dimW = {300, 45, 100, 90};
        int[] dimH = {35, 40};
        Dimension dispDim = new Dimension(dimW[0], dimH[0]);
        Dimension regDim = new Dimension(dimW[1], dimH[1]);
        Dimension rColDim = new Dimension(dimW[2], dimH[1]);
        Dimension zeroButDim = new Dimension(dimW[3], dimH[1]);
        Font font = new Font("Times new Roman", Font.BOLD, 14);

        for(int i = 0; i < 4; i++)
            function[i] = false;

        FlowLayout f1 = new FlowLayout(FlowLayout.CENTER);
        FlowLayout f2 = new FlowLayout(FlowLayout.CENTER, 1, 1);
        for(int x = 0; x < 5; x++)
            row[x] = new JPanel();
        row[0].setLayout(f1);
        for(int x = 0; x < 5; x++)
            row[x].setLayout(f2);

        for(int i = 0; i < 19; i++) {
            buttons[i] = new JButton();
            buttons[i].setText(buttonString[i]);
            buttons[i].setFont(font);
            buttons[i].addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent b) {
                    if(b.getSource() == buttons[0])
                        display.append("7");
                    if(b.getSource() == buttons[1])
                        display.append("8");
                    if(b.getSource() == buttons[2])
                        display.append("9");
                    if(b.getSource() == buttons[3]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[0] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[4])
                        display.append("4");
                    if(b.getSource() == buttons[5])
                        display.append("5");
                    if(b.getSource() == buttons[6])
                        display.append("6");
                    if(b.getSource() == buttons[7]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[1] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[8])
                        display.append("1");
                    if(b.getSource() == buttons[9])
                        display.append("2");
                    if(b.getSource() == buttons[10])
                        display.append("3");
                    if(b.getSource() == buttons[11]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[2] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[12])
                        display.append(".");
                    if(b.getSource() == buttons[13]) {
                        temporary[0] = Double.parseDouble(display.getText());
                        function[3] = true;
                        display.setText("");
                    }
                    if(b.getSource() == buttons[14])
                        clear();
                    if(b.getSource() == buttons[15])
                        getSqrt();
                    if(b.getSource() == buttons[16])
                        getResult();
                    if(b.getSource() == buttons[17])
                        display.append("0");
                }
            });
        }

        display.setFont(font);          
        display.setEditable(false);
        display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        display.setPreferredSize(dispDim);
        for(int i = 0; i < 14; i++)
            buttons[i].setPreferredSize(regDim);
        for(int i = 14; i < 18; i++) 
            buttons[i].setPreferredSize(rColDim);
        buttons[18].setPreferredSize(zeroButDim);

        row[0].add(display);
        this.add(row[0]);

        for(int i = 0; i < 4; i++)
            row[1].add(buttons[i]);
        row[1].add(buttons[14]);
        this.add(row[1]);

        for(int i = 4; i < 8; i++)
            row[2].add(buttons[i]);
        row[2].add(buttons[15]);
        this.add(row[2]);

        for(int i = 8; i < 12; i++)
            row[3].add(buttons[i]);
        row[3].add(buttons[16]);
        this.add(row[3]);

        row[4].add(buttons[18]);
        for(int i = 12; i < 14; i++)
            row[4].add(buttons[i]);
        row[4].add(buttons[17]);
        this.add(row[4]);

        this.setVisible(true);
    }

    public static void clear() {
        try {
            display.setText("");
            for(int i = 0; i < 4; i++)
                function[i] = false;
            for(int i = 0; i < 2; i++)
                temporary[i] = 0;
        } catch(NullPointerException e) {
        }
    }
    public static void getSqrt() {
        try {
            double value = Math.sqrt(Double.parseDouble(display.getText()));
            display.setText(Double.toString(value));
        } catch(NumberFormatException e) {
        }
    }
    public static void getPosNeg() {
        try {
            double value = Double.parseDouble(display.getText());
            if(value != 0) {
                value = value * (-1);
                display.setText(Double.toString(value));
            }
            else {
            }
        } catch(NumberFormatException e) {
        }
    }
    public static void getResult() {
        double result = 0;
        temporary[1] = Double.parseDouble(display.getText());
        String temp0 = Double.toString(temporary[0]);
        String temp1 = Double.toString(temporary[1]);
        try {
            if(temp0.contains("-")) {
                String[] temp00 = temp0.split("-", 2);
                temporary[0] = (Double.parseDouble(temp00[1]) *-1);
            }
            if(temp1.contains("-")) {
                String[] temp11 = temp1.split("-", 2);
                temporary[1] = (Double.parseDouble(temp11[1]) * -1);
            }
        } catch(ArrayIndexOutOfBoundsException e) {
        }
        try {
            if(function[2] == true)
                result = temporary[0] * temporary[1];
            else if(function[3] == true)
                result = temporary[0] / temporary[1];
            else if(function[0] == true)
                result = temporary[0] + temporary[1];
            else if(function[1] == true)
                result = temporary[0] - temporary[1];
            display.setText(Double.toString(result));
            for(int i = 0; i < 4; i++)
                function[i] = false;
        } catch(NumberFormatException e) {
        }
    }
    public final void setDesign() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception e) {
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM