import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
public class SpeedMathGoStartScreen extends JFrame{
JLabel background;
JLabel title;
JButton play;
JPanel playPanel;
JLabel playLabel;
JButton guide;
JPanel guidePanel;
public SpeedMathGoStartScreen() {
title = new JLabel("SPEED MATH GO");
title.setFont(new Font("Comic Sans", Font.BOLD, 96));
title.setBounds(90, 0, 900, 100);
this.add(title);
ImageIcon backgroundImage = new ImageIcon("C:\\Users\\chenr\\Documents\\Speed Math Go\\iconfinder_play-circle_2561292\\ttt.png");
background = new JLabel(backgroundImage);
background.setBounds(0, 0, 1000, 700);
this.add(background);
ImageIcon playImage = new ImageIcon("C:\\Users\\chenr\\Documents\\Speed Math Go\\iconfinder_play-circle_2561292\\iconfinder_play-circle_2561292.png");
play = new JButton("Play", playImage);
playPanel = new JPanel();
playPanel.setLayout(null);
playPanel.setBounds(345, 200, 300, 150);
play.setBounds(345, 200, 300, 150);
play.setFont(new Font("Comic Sans", Font.BOLD, 48));
play.setBackground(Color.RED);
play.setVisible(true);
playPanel.add(play);
this.add(playPanel);
ImageIcon guideImage = new ImageIcon("C:\\Users\\chenr\\Documents\\Speed Math Go\\iconfinder_play-circle_2561292\\iconfinder_thefreeforty_map_1243687.png");
guide = new JButton("Guide", guideImage);
guidePanel = new JPanel();
guidePanel.setLayout(null);
guidePanel.setBounds(320, 400, 350, 150);
guide.setBounds(320, 400, 350, 150);
guide.setFont(new Font("Comic Sans", Font.BOLD, 48));
guide.setBackground(Color.CYAN);
guide.setVisible(true);
guidePanel.add(guide);
this.add(guidePanel);
//play.addActionListener(new ActionListener()
// {
// public void actionPerformed(ActionEvent e)
// {
// new SpeedMathGoGUI();
// }
// });
play.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SpeedMathGoGUI();
dispose();
}
});
guide.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SpeedMathGoGuide();
dispose();
}
}
);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(1000, 700);
setVisible(true);
}
}
如果在Eclipse上运行此命令,则只会显示向导按钮。当我注释掉第56行(应该是this.add(guidePanel))时,只显示play按钮。我必须对代码进行哪些调整才能使两者都显示在JFrame上?我还想知道其他类是否影响了这个错误,因为当按钮被按下时,这个错误会转换到另外两个错误。
发布于 2020-10-21 00:05:49
不要使用空布局!不要使用setBounds()!
Swing旨在与布局管理器一起使用,因此您需要了解布局管理器是如何工作的。
仅显示向导按钮。
this.add(playPanel);
...
this.add(guidePanel);
默认情况下,JFrame的内容窗格使用BorderLayout
。
在上面的代码中,当您向BorderLayout
添加组件并且没有指定约束时,将使用CENTER
约束。但是,在“中心”中只能显示一个组件,因此您可以看到添加的最后一个组件。
如何同时显示多个按钮
如果您想在一个面板上有两个按钮(或任何组件),那么可以在一个面板上添加两个按钮。基本代码为:
JPanel buttonsPanel = new JPanel();
buttonsPanel.add( play );
buttonsPanel.add( guide );
this.add(buttonsPanel);
JPanel的默认布局管理器是FlowLayout
。这是一个简单的布局。零部件显示在同一行上,添加零部件时不需要约束。
有关其他布局管理器的更多信息和工作示例,请阅读Layout Managers上的Swing教程中的部分。您可以为您的需求选择适当的布局管理器。您始终可以使用不同的布局管理器来嵌套面板,以实现所需的布局。
https://stackoverflow.com/questions/64448359
复制相似问题