java - 更改 Swing GUI 的边界和 JButton 的命名

标签 java swing jbutton setbounds

我知道如何设置边界,所以最后一个新的 setbounds() 调用会给出新的边界,但我不知道新的边界应该有多长/多宽,这取决于按钮的输入数量例如这里:

import java.awt.BorderLayout;
import java.awt.Color; 
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.border.EmptyBorder;

public class Book_GUI extends JFrame {

private EconomyClass eco;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Book_GUI frame = new Book_GUI();
                frame.setVisible(true);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public Book_GUI() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    //contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
    //this.add(contentPane);
    JButton btnBookFlight;

    //eco = new EconomyClass();
    //eco.setSeats(5);
    for(int i=0;i<45;i++){
    btnBookFlight = new JButton("Book" +i);
        btnBookFlight.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                JButton button = (JButton)arg0.getSource();;
                button.setBackground(Color.RED);
                button.setOpaque(true);
            }
        });
        btnBookFlight.setBounds(77, 351, 100, 23);
        contentPane.add(btnBookFlight);
    }       
}

}

如您所见,最后 5 个按钮不可见,必须用鼠标将 GUI 放大一点...并且前 10 个按钮比其他按钮小,因为在 9 之后数字增加,这是合乎逻辑的,但我可以对齐吗所有这些都以相同的顺序和大小?另一个问题,按钮名称“Book”只是为了测试它应该是 1A Window, 1B Middle, 1C Aisle some space 1D Aisle,1E Middle,1F Middle, 1G Aisle some space 1H Aisle, 1I Middle, 1J Window and below these 2A Window...就像在飞机上一样,非常感谢任何提示我如何安排命名和它们之间的必要空间!

最佳答案

您应该避免使用空布局或绝对定位来安排 swing 组件。在这种情况下始终使用最合适的布局管理器,因为它有很多优点。处理当前情况的最佳布局是 GridLayout

这是使用 GridLayout 修改后的代码版本

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.border.EmptyBorder;

public class Book_GUI extends JFrame {

    // private EconomyClass eco;
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Book_GUI frame = new Book_GUI();
                    frame.setVisible(true);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Book_GUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // setBounds(100, 100, 450, 300);

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new GridLayout(9, 5));
        // contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        // this.add(contentPane);
        JButton btnBookFlight;

        // eco = new EconomyClass();
        // eco.setSeats(5);
        for (int i = 0; i < 45; i++) {
            btnBookFlight = new JButton("Book" + i);
            btnBookFlight.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    JButton button = (JButton) arg0.getSource();
                    ;
                    button.setBackground(Color.RED);
                    button.setOpaque(true);
                }
            });
            // btnBookFlight.setBounds(77, 351, 100, 23);
            contentPane.add(btnBookFlight);
        }
        pack();
    }

}

进一步阅读:A Visual Guide to Layout Managers

关于java - 更改 Swing GUI 的边界和 JButton 的命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17145083/

相关文章:

java - 关于在 jBoss 中处理多个 ear 部署的建议

java - 为 future 可能的可扩展性保留一个非最终值类

Java在jframe中打开文件窗口

java - 如何在 Java 中组织 swing 内容(标签、按钮等)

java - 按下按钮时 JFrame 将不会加载新的 JFrame

java - JButton 边距。灵光一现时不受尊重

java - 显示 TableView 选项卡 Pane

Java ssl 握手失败 (SSLPoke)

java - 调用 Component.getGraphics 真的不行吗?

java - 如何让按钮单击显示组合选项