首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在同一个JFrame上同时显示多个按钮?

如何在同一个JFrame上同时显示多个按钮?
EN

Stack Overflow用户
提问于 2020-10-20 23:26:22
回答 1查看 46关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
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上?我还想知道其他类是否影响了这个错误,因为当按钮被按下时,这个错误会转换到另外两个错误。

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 00:05:49

不要使用空布局!不要使用setBounds()!

Swing旨在与布局管理器一起使用,因此您需要了解布局管理器是如何工作的。

仅显示向导按钮。

代码语言:javascript
代码运行次数:0
运行
复制
this.add(playPanel);
...
this.add(guidePanel);

默认情况下,JFrame的内容窗格使用BorderLayout

在上面的代码中,当您向BorderLayout添加组件并且没有指定约束时,将使用CENTER约束。但是,在“中心”中只能显示一个组件,因此您可以看到添加的最后一个组件。

如何同时显示多个按钮

如果您想在一个面板上有两个按钮(或任何组件),那么可以在一个面板上添加两个按钮。基本代码为:

代码语言:javascript
代码运行次数:0
运行
复制
JPanel buttonsPanel = new JPanel();
buttonsPanel.add( play );
buttonsPanel.add( guide );
this.add(buttonsPanel);

JPanel的默认布局管理器是FlowLayout。这是一个简单的布局。零部件显示在同一行上,添加零部件时不需要约束。

有关其他布局管理器的更多信息和工作示例,请阅读Layout Managers上的Swing教程中的部分。您可以为您的需求选择适当的布局管理器。您始终可以使用不同的布局管理器来嵌套面板,以实现所需的布局。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64448359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档