Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 显示窗口,但不显示按钮_Java_Swing - Fatal编程技术网

Java 显示窗口,但不显示按钮

Java 显示窗口,但不显示按钮,java,swing,Java,Swing,我写这段代码是为了显示一个有三个按钮的窗口。但是,将显示窗口,但不会显示按钮。代码如下: import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import javax.swing.*; import java.awt.*; public class Test3 extends JFrame{ public Test3

我写这段代码是为了显示一个有三个按钮的窗口。但是,将显示窗口,但不会显示按钮。代码如下:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.*;



public class Test3 extends JFrame{


public Test3() {

    JFrame frame = new JFrame("Exemple");
    JButton button1 = new JButton("Règles");
    button1.setBounds(100, 60, 100, 30);
    JButton button2 = new JButton("Jouer");
    JButton button3 = new JButton("Scores");
    JPanel pane1 = new JPanel(new GridLayout(0, 1));
    this.setVisible(true);

    pane1.add(button1);
    pane1.add(button2);
    pane1.add(button3);
    frame.getContentPane().add(pane1, BorderLayout.EAST);
    this.setVisible(true);
    setSize(800, 600);



}

public static void main(String[] args) {
    Test3 test3 = new Test3();
}

}
有人知道如何解决这个问题吗

谢谢你的帮助


Agnès

您有两个窗口

public class Test3 extends JFrame{
    public Test3() {
        JFrame frame = new JFrame("Exemple");
您正在将内容添加到
框架
,但显示的是
Test3

一般来说,应该避免从顶级容器(如
JFrame
)进行扩展,而是在需要时创建实例。例如,这将解除您对给定实现的锁定,并允许您灵活地决定如何重用给定组件

public class Test3 {
    public Test3() {
        JFrame frame = new JFrame("Exemple");
        JButton button1 = new JButton("Règles");
        JButton button2 = new JButton("Jouer");
        JButton button3 = new JButton("Scores");
        JPanel pane1 = new JPanel(new GridLayout(0, 1));

        pane1.add(button1);
        pane1.add(button2);
        pane1.add(button3);
        frame.getContentPane().add(pane1, BorderLayout.EAST);
        frame.pack();
        frame.setVisible(true);
    }
可运行的示例

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test3 {

    public Test3() {

        JFrame frame = new JFrame("Exemple");
        JButton button1 = new JButton("Règles");
        button1.setBounds(100, 60, 100, 30);
        JButton button2 = new JButton("Jouer");
        JButton button3 = new JButton("Scores");
        JPanel pane1 = new JPanel(new GridLayout(0, 1));

        pane1.add(button1);
        pane1.add(button2);
        pane1.add(button3);
        frame.getContentPane().add(pane1, BorderLayout.EAST);
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                Test3 test3 = new Test3();
            }
        });
    }

}

请像这样试试,我已经改正了

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.*;



public class Test3 extends JFrame{


public Test3() {

   super("Exemple");
    JButton button1 = new JButton("Règles");
    button1.setBounds(100, 60, 100, 30);
    JButton button2 = new JButton("Jouer");
    JButton button3 = new JButton("Scores");
    JPanel pane1 = new JPanel(new GridLayout(0, 1));
    this.setVisible(true);

    pane1.add(button1);
    pane1.add(button2);
    pane1.add(button3);
    getContentPane().add(pane1, BorderLayout.EAST);
    this.setVisible(true);
    setSize(800, 600);



}

public static void main(String[] args) {
    Test3 test3 = new Test3();
}

}

你能试试这个.pack()吗?@damus4在
JFrame
的哪个实例上应该使用OP-pack吗?@MadProgrammer这是我的错,我没有看到所有的图片。。。所以在框架上做一个pack(),然后在框架上设置visible,而不是这个twice@damus4没关系,我的大脑在试图阅读代码时崩溃了:你纠正了什么,为什么选择这样纠正?为什么OP要使用您的方法或其他方法?OP需要用三个按钮显示窗口。所以当他扩展jframe时,最好使用来自超类的方法,而不是创建jframe的新实例。当我打字时,你的答案贴在我的答案之前。。好吧,别告诉我,告诉操作。但是,从
JFrame
扩展通常是一个不好的想法,你能告诉我它不好的原因吗?例如,如果您了解android,gui对象会扩展Activitiy,但我很少看到使用new Activity()的人Swing不是android,您构建它的方法也不同。您没有向框架添加任何新功能,因此扩展它只是将您锁定到一个实现中,这使得代码的重用非常困难。感谢您的帮助,但是,我有两个错误:“令牌上的语法错误,应改为ClassHeader”和“令牌上的语法错误”public,@expected after this token'for line public Test3(){@AgnèsMustar,这是因为它只是一个构造函数,它删除了对
JFrame
的两个
引用中的一个,对其进行解析,这样您就只有一个可以向其中添加组件并使其可见的帧。。。