Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从我的main调用JFrame方法_Java_Swing_User Interface - Fatal编程技术网

Java Can';t从我的main调用JFrame方法

Java Can';t从我的main调用JFrame方法,java,swing,user-interface,Java,Swing,User Interface,我用java编写了一个小程序,从输入中获取结果 它在控制台中工作,但现在我希望它有一个GUI,因为我正在使用SwingJFrames 这就是我被卡住的地方:我设法显示一个表单,从我的主代码创建它。 但是我想随意操纵这个表单,使用简单的setter和getter 我制作了一个setter来更改表单面板的值,但是主代码无法识别该方法 我对GUI非常陌生,所以我敢打赌我只是缺乏使用Swing的正确逻辑,但是如果有人愿意知道我犯了什么严重错误,下面是我的代码,将我所遇到的问题简化到最低限度: 注意:为了

我用java编写了一个小程序,从输入中获取结果

它在控制台中工作,但现在我希望它有一个GUI,因为我正在使用SwingJFrames

这就是我被卡住的地方:我设法显示一个表单,从我的主代码创建它。 但是我想随意操纵这个表单,使用简单的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...

}

}

JFrame类没有setRes()方法。。。。所以您不能调用
frame.asetRes()
因为没有这样的方法


您需要的是mainform类的实例。

JFrame类没有setRes()方法。。。。所以您不能调用
frame.asetRes()
因为没有这样的方法

您需要的是mainform类的实例。

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

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

class mainform extends JFrame
此外:请学习java命名约定。类名总是大写,所以在这里,“TestFrame”可能是一个更好的名称。也要避免方法名称的“缩写”。然后“setRes()”什么也没说;你最好称它为“placeTextOnPanel”或类似的东西。

你声明frame为JFrame类型。编译器并不关心赋值的右边

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

class mainform extends JFrame

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

谢谢你的回答! 所以rooky mystake,我没有将我的mainform类扩展到JFrame中

下面的代码将实际编译,但标签的文本不会更改。为什么呢

(还有,是的,对命名约定感到抱歉,我的习惯是在用正确的命名编写真正的GUI之前,在一个虚假的项目上做一些修改。)


公共类mainform扩展了JFrame{
公共JPanel小组1;
专用JLabel输出;
公共空间集合()
{
output.setText(“hello”);
}
公共静态void main(字符串[]args)引发IOException{
mainform frame=新的mainform();
frame.setContentPane(新的mainform().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setRes();
}
}

谢谢您的回答! 所以rooky mystake,我没有将我的mainform类扩展到JFrame中

下面的代码将实际编译,但标签的文本不会更改。为什么呢

(还有,是的,对命名约定感到抱歉,我的习惯是在用正确的命名编写真正的GUI之前,在一个虚假的项目上做一些修改。)


公共类mainform扩展了JFrame{
公共JPanel小组1;
专用JLabel输出;
公共空间集合()
{
output.setText(“hello”);
}
公共静态void main(字符串[]args)引发IOException{
mainform frame=新的mainform();
frame.setContentPane(新的mainform().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setRes();
}
}

问问自己;
frame
是什么类,
setRes
方法属于什么类?为什么你希望JFrame与你的新类
mainform
有某种关联?问问你自己;什么类是
frame
,以及
setRes
方法属于什么类?为什么您希望JFrame以某种方式与您的新类
mainform
相关?我想补充一点,
mainframe
此时应该从
JFrame
继承。(也请参见大型机
以遵循命名约定)。@KevinEsche更正。谢谢你的提示!我要补充的是,
mainframe
此时应该继承自
JFrame
。(也请参见大型机
以遵循命名约定)。@KevinEsche更正。谢谢你的提示!