无法从我的主

时间:2016-10-19 14:07:59

标签: java swing user-interface

我在java中构建了一个小程序来从输入中获取结果。

它在控制台中运行,但现在我希望它有一个GUI,因为我使用了swing JFrame。

这就是我遇到的问题:我设法显示一个表单,从我的主代码创建它。 但后来我想使用简单的setter和getter来随意操作这个表单。

我已经制作了一个setter来更改我的表单面板的值,但主代码不会识别该方法。

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

}

}

3 个答案:

答案 0 :(得分:2)

JFrame类没有setRes()方法....因此您无法调用frame.asetRes() 因为没有这样的方法。

您需要的是 mainform 类的实例。

答案 1 :(得分:2)

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

对于编译器,frame是 JFrame 。并且JFrames没有那种方法。因此,您必须将变量的类型更改为 mainform 。当然,为了使 mainform 成为一个JFrame,你必须使你的类成为一个框架:

class mainform extends JFrame

此外:请研究java命名约定。类名总是去UpperCase,所以也许" TestFrame"在这里会是一个更好的名字。还要避免使用"缩写"方法名称。然后" setRes()"没有说什么;你最好称之为" placeTextOnPanel"或类似的东西。

答案 2 :(得分:0)

感谢您的所有答案! 所以新的mystake,我没有将我的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();

}

}