Java 我能';t查看按钮-(遵循教程)

Java 我能';t查看按钮-(遵循教程),java,swing,user-interface,Java,Swing,User Interface,我觉得这很奇怪,因为我只是在学习一个教程,他的工作很好。我们有相同的密码 我在另一台计算机上尝试了此源代码,但仍然不起作用 主要类别: import javax.swing.JFrame; import javax.swing.SwingUtilities; public class swingJava { public static void main(String[] args){ JFrame frame = new JFrame("Hello World!");

我觉得这很奇怪,因为我只是在学习一个教程,他的工作很好。我们有相同的密码

我在另一台计算机上尝试了此源代码,但仍然不起作用

主要类别:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class swingJava {

    public static void main(String[] args){
        JFrame frame = new JFrame("Hello World!");

        SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                frame.setSize(500, 400);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}
这是大型机类

import java.awt.*;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JFrame;

public class MainFrame extends JFrame{
public MainFrame(String title){
    super(title);

    // Set layout manager
    setLayout(new BorderLayout());

    // Create Swing Component
    JTextArea textArea = new JTextArea("test");
    JButton button = new JButton("Click me");

    // Add Swing Componenents to content pane

    Container c = getContentPane();

    c.add(textArea, BorderLayout.CENTER);
    c.add(button, BorderLayout.SOUTH);
}
}
这是我遵循的教程

您从不创建大型机的实例,而是简单地创建一个JFrame的实例,这是两码事

但是,试着尝试一下……

SwingUtilities.invokeLater(new Runnable() {
    public void run(){
        MainFrame frame = new MainFrame("Hello World!");
        frame.setSize(500, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
});
一般来说,不鼓励直接从顶级容器(如
JFrame
)进行扩展,因为您没有向类添加任何新功能,只是将自己限制在一个用例中


通常,最好从
JPanel
扩展,这样您就可以将它添加到您喜欢的容器中,而不是使用
JFrame=newjframe(“Hello World!”)
您应该使用
MainFrame frame=new MainFrame(“Hello World!”)
,因为您要在MainFrame中添加所有组件,如textare和按钮。

而不是这个

JFrame frame = new JFrame("Hello World!");
这样做:

MainFrame frame = new MainFrame("Hello World!");
您永远不会创建大型机实例,因此不会有任何组件


您使用了simple JFrame,默认情况下它不包含任何组件

您需要创建大型机的实例。更改您的声明,如:

 JFrame frame = new MainFrame("Hello World!");

您需要创建类的实例,还必须通过set-Bounds方法设置类的大小和位置

public class Main Frame extends J Frame {
private static final long serialVersionUID = 1L;
   public MainFrame(String title) {
    super(title);
    setLayout(new BorderLayout());
    JTextArea textArea = new JTextArea("test");
    textArea.setBounds(10, 10, 50, 20);
    JButton button = new JButton("Click me");
    button.setBounds(10, 20, 50, 20);
    Container c = getContentPane();
    c.add(textArea, BorderLayout.CENTER);
    c.add(button, BorderLayout.SOUTH);
}

public static void main(String args[]) {
    MainFrame frame = new MainFrame("Title");
    frame.setSize(500, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

您从未创建或使用大型机的实例:
JFrame=newjframe(“helloworld!”)应该是这样的:
MainFrameframe=newmainframe(“helloworld!”)嗨,欢迎来到SO。请提供问题的简短描述:“它不起作用”不描述什么不起作用,实际行为是什么,以及您预期会发生什么“…并且您必须通过设置边界方法设置大小和位置。”不!Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。