我是JAVA的新手,需要以下代码的帮助。我写过两节课。在一个我声明JFrame,在另一个JLabel。我想通过这种方法将Label添加到Frame中,但是我收到了一个错误。我应该做些什么改变才能使它发挥作用:
import java.awt.*;
import javax.swing.*;
public class test {
public static void main (String[] args) {
JLabel l1 = new JLabel("Label into Frame");
Frame f1 = new Frame();
f1.displayFrame.add(l1);
f1.displayFrame();
}
}
class Frame {
void displayFrame() {
JFrame frame = new JFrame("Test");
frame.setVisible(true);
}
}
答案 0 :(得分:3)
你无法像这样创建它。如果要构建自定义框架类,则必须将其定义为
public class MyFrame extends JFrame
获取所有JFrame方法等。在上面的代码中,您调用displayFrame
,然后在尝试调用方法add
时,这不会起作用。为了使它工作(以最简单的形式),试试这个:
public static void main(String[] args) {
JLabel l1 = new JLabel("Label into Frame");
JFrame f1 = new JFrame();
f1.setSize(100, 100);
f1.add(l1);
f1.setVisible(true);
}
我建议你尝试阅读一些优秀的java教程来了解基础知识。
答案 1 :(得分:0)
- 将UI
工作放在UI
主题上,Non-UI
工作在Non-UI
主题上总是好的。
- 现在在Java GUI应用程序中,在main()
中安排GUI的构建后,Event Dispatcher Thread
方法不长期,它
退出,现在它的EDT负责处理GUI。
- 请勿在{{1}}上直接放置 JLable
,尝试使用JFrame
上的JPanel
然后放置{ {1}}就可以了。
- 但只是为了保持简单我将不使用 JPanel。
<强>例如强>
JFrame
答案 2 :(得分:0)
方法displayFrame不会返回任何内容
void displayFrame() {...}
方法减速遵循 {accessibility} [type] [name({parameter {,parameter ...}})]
的模式 辅助功能定义了谁可以访问该方法,并包括public
,protected
和private
或package-private
类型指的是此方法将返回的值的类型。一种特殊类型的void
表示该方法不会返回值
名称是方法的名称,这是您识别方法并访问它的方式
参数是您要传递给方法的任意数量的可选值。
有了这些信息,让我们仔细看看这个方法。
void displayFrame() {...}
这就是说该方法是 package-private (这意味着该方法只能在同一个包中访问,但不能通过子类扩展)并且不会返回任何内容。 / p>
f1.displayFrame.add(l1);
因此,当您调用此方法时,Java无法弄清楚如何将ad(...)
应用于任何内容,这没有任何意义。
更好的解决方案是提供 getter 方法来获取帧或从 displayFrame 方法返回帧。两者都有很好的论据,但我个人更喜欢 getters
public class test {
public static void main (String[] args) {
JLabel l1 = new JLabel("Label into Frame");
Frame f1 = new Frame();
JFRame myFrame = f1.getFrame();
myFrame.add(l1);
f1.displayFrame(); // there's actually no need for this
}
}
class Frame {
private JFrame frame = new JFrame("Test");
public JFrame getFrame() {
return frame;
}
void displayFrame() {
frame.setVisible(true);
}
}
我会花时间阅读Learning the Java Language