我正在尝试用Java学习一些基本的GUI实现。
我有两个类,一个包含构造函数。此构造函数创建一个新的JFrame对象。
我在处理这个JFrame构造函数时遇到了麻烦 - 我想改变它的大小和其他操作,但在调用构造函数之后无法弄清楚如何操作。
这两个类都是 BmrCalcMain :
import javax.swing.*;
public class BmrCalcMain {
public static void main(String[] args) {
BmrCalcv2 frame = new BmrCalcv2();
BmrCalcv2.newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BmrCalcv2.newFrame.setVisible(true);
BmrCalcv2.newFrame.setSize(650, 475);
BmrCalcv2.newFrame.setResizable(false);
}
}
BmrCalcv2:
package v2;
import javax.swing.*;
import java.awt.FlowLayout;
public class BmrCalcv2 {
private JLabel ageLabel;
private JLabel genderLabel;
private JLabel img1;
static JFrame newFrame;
public BmrCalcv2() {
newFrame = new JFrame("BMR/TDEE Calculator");
newFrame.setLayout(new FlowLayout());
ageLabel = new JLabel("Age:");
genderLabel = new JLabel("Gender:");
img1 = new JLabel(new ImageIcon("filesrc/Bodybuilding-icon.png"));
newFrame.add(ageLabel);
newFrame.add(genderLabel);
newFrame.add(img1);
}
}
运行应用程序时,BmrCalcv2
类的JLabel和图像不会出现。我相信这是因为在主类中,使用frame是错误的(我需要以某种方式使用newFrame但是如果我将帧更改为newFrame则会抛出错误)。
感谢任何指导。
答案 0 :(得分:2)
了解您的BmrCalcv2类使用的是两个 JFrame,而不是一个。一个是扩展JFrame的BmrCalcv2类的实例,另一个是BmrCalcv2构造函数中的私有字段。你应该摆脱一个或另一个来理顺这一切。如果您决定使用该变量,则将其设为该类的字段,而不是构造函数的本地变量。或者如果你想使用你的类扩展的JFrame,那么去掉newFrame字段:
即,
import javax.swing.*;
import java.awt.FlowLayout;
public class BmrCalcv2 extends JFrame {
private JLabel ageLabel;
private JLabel genderLabel;
private JLabel img1;
public BmrCalcv2() {
super("BMR/TDEE Calculator");
setLayout(new FlowLayout());
ageLabel = new JLabel("Age:");
genderLabel = new JLabel("Gender:");
img1 = new JLabel(new ImageIcon("filesrc/Bodybuilding-icon.png"));
add(ageLabel);
add(genderLabel);
add(img1);
}
}
其他方面的建议: