[英]JLabels into JFrame
我是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);
}
}
您不能像这样创建它。 如果要构建自定义框架类,则必须像
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教程,以了解基础知识。
-它总是好的,以保持UI
的工作UI
线程, Non-UI
的工作Non-UI
线程。
-现在在Java GUI应用程序中, main()
方法已经存在很长一段时间了,在Event Dispatcher Thread
安排了GUI的构造之后,它退出了,现在EDT负责处理该GUI。
-不要直接放置 JLable
上JFrame
,请尝试使用JPanel
上JFrame
,然后将一个JLable
就可以了。
-但为了简单起见,在这里我将不使用 JPanel。
例如:
class MyFrame extends JFrame {
JLabel l1;
public MyFrame() {
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setComponent();
setHandling();
}
public void setComponent(){
l1 = new JLabel("Label into Frame");
this.add(l1);
}
public void setHandling(){
// Use this to handle the Events on the EventSources.
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
MyFrame frame = new MyFrame("Test");
frame.setVisible(true);
});
}
}
方法displayFrame不返回任何内容
void displayFrame() {...}
方法减速遵循{accessibility} [type] [name({parameter {,parameter ...}}})]的模式
可访问性定义了谁可以访问该方法,并包括public
, protected
, private
或package-private
类型是指此方法将返回的值的类型。 特殊类型的void
表示该方法将不返回值
名称是方法的名称,这是您识别方法和访问方法的方式
参数是您要传递给方法的任意数量的可选值。
有了这些信息,让我们仔细看看该方法。
void displayFrame() {...}
这意味着该方法是程序包专用的 (这意味着该方法只能从同一程序包中的with进行访问,而不能由子类扩展),并且将不返回任何内容。
f1.displayFrame.add(l1);
因此,当您调用此方法时,Java无法弄清楚如何将ad(...)
应用于所有内容,这没有任何意义。
更好的解决方案是提供getter方法以获取帧或从displayFrame方法返回帧。 两者都有很好的论据,但我个人更喜欢使用吸气剂
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);
}
}
我会花时间通读《 学习Java语言》
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.