无法从 GUI 中的 main 调用 JFrame 方法

问题描述 投票:0回答:3

我用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...

}

}
java swing user-interface
3个回答
2
投票

您声明 frameJFrame 类型。并且编译器不关心赋值的右侧。

对于编译器来说,框架是一个JFrame。而 JFrames 没有这个方法。所以你必须将变量的类型更改为mainform。当然,为了使 mainform 成为 JFrame,您必须 make 您的类成为框架:

class mainform extends JFrame

此外:请研究java命名约定。类名总是大写,所以“TestFrame”在这里可能是一个更好的名称。还要避免方法名称的“缩写”。然后“setRes()”什么也没说;你最好将其称为“placeTextOnPanel”或类似的名称。


2
投票

JFrame 类没有 setRes() 方法....所以你不能调用

frame.asetRes()
因为没有这样的方法。

您需要的是 mainform 类的实例。


0
投票

感谢您的所有回答! 所以菜鸟我的赌注,我没有将我的 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();

}

}
© www.soinside.com 2019 - 2024. All rights reserved.