我用java构建了一个小程序来从输入中获取结果。
它可以在控制台中工作,但现在我希望它有一个 GUI,为此我使用 swing JFrames。
这就是我陷入困境的地方:我设法显示一个表单,并从我的主代码创建它。 但后来我想使用简单的 setter 和 getter 随意操作这个表单。
我制作了一个设置器来更改表单面板的值,但主代码无法识别该方法。
我对 GUI 很陌生,所以我敢打赌我只是缺乏使用 Swing 的正确逻辑,但如果有人愿意找出我犯的严重错误,这是我的代码,精简到我所坚持的最低限度:
注意:这里为了方便起见,我将主代码直接放入类中,但我尝试将 GUI 类与主代码分开,结果相同。
public class mainform {
public JPanel panel1;
private JLabel output;
public void setRes()
{
output.setText("hello");
}
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("mainform");
frame.setContentPane(new mainform().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setRes(); // HERE IS WHERE "setRes" won't be recognized as a method...
}
}
您声明 frame 为 JFrame 类型。并且编译器不关心赋值的右侧。
对于编译器来说,框架是一个JFrame。而 JFrames 没有这个方法。所以你必须将变量的类型更改为mainform。当然,为了使 mainform 成为 JFrame,您必须 make 您的类成为框架:
class mainform extends JFrame
此外:请研究java命名约定。类名总是大写,所以“TestFrame”在这里可能是一个更好的名称。还要避免方法名称的“缩写”。然后“setRes()”什么也没说;你最好将其称为“placeTextOnPanel”或类似的名称。
JFrame 类没有 setRes() 方法....所以你不能调用
frame.asetRes()
因为没有这样的方法。
您需要的是 mainform 类的实例。
感谢您的所有回答! 所以菜鸟我的赌注,我没有将我的 mainform 类扩展为 JFrame。
以下内容实际上会编译,但标签的文本不会改变。这是为什么?
(另外,对命名约定感到抱歉,在用正确的命名实际编码真正的 GUI 之前,我只是在一个虚假的项目上稍微摆弄一下。)
<!-- language: java -->
public class mainform extends JFrame {
public JPanel panel1;
private JLabel output;
public void setRes()
{
output.setText("hello");
}
public static void main(String[] args) throws IOException {
mainform frame = new mainform();
frame.setContentPane(new mainform().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setRes();
}
}