[英]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.