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
的两个引用中的一个,对其进行解析,这样您就只有一个可以向其中添加组件并使其可见的帧。。。