我在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...
}
}
答案 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();
}
}