javax.swing中的默认JButton

时间:2019-03-30 15:56:57

标签: java swing jbutton

当我用Java swing编译代码时,我得到了默认的Bounds。占据整个帧大小的按钮。我尝试了3个按钮。首先,我将最后一个按钮设置为默认按钮,然后删除上一个按钮,然后再将两个按钮中的一个按钮设置为默认按钮,就像上一个一样。请帮我解决这个问题。

!(https://mail.google.com/mail/u/1?ui=2&ik=ee9f500a4d&attid=0.1&permmsgid=msg-a:r2287244781956742986&view=att&disp=safe&realattid=f_jtvo6he20

import javax.swing.*;
class rough{
    public static void main(String args[]){
        JFrame f=new JFrame("new");
        JButton b1=new JButton("click");
        JButton b2=new JButton("Hello");
        JButton b3=new JButton("like");
        b1.setBounds(20,20,100,50);
        b2.setBounds(120,20,100,50);
        b3.setBounds(220,20,100,50);
        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.setSize(600,600);
        f.setVisible(true);
        f.setLayout(null);
    }
}

预期结果:在第3帧中,按钮将并排放置。 实际结果:默认为一个按钮。

1 个答案:

答案 0 :(得分:1)

您正在调用f.setVisible(true) 之前,然后设置了布局管理器,因此GUI使用JFrame的默认BorderLayout进行显示-表示仅显示最后添加的组件。

可怜的解决方案是先设置布局。

一种更好的解决方案是学习然后适当使用布局管理器。

enter image description here

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;

@SuppressWarnings("serial")
public class Rough2 extends JPanel {

    private static final int P_WIDTH = 600;
    private static final int P_HEIGHT = 400;

    public Rough2() {
        JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 8, 8));
        String[] buttonNames = { "Click", "Hello", "Like" };
        for (String buttonName : buttonNames) {
            JButton button = new JButton(buttonName);
            int mnemonic = (int) buttonName.charAt(0);
            button.setMnemonic(mnemonic);
            button.setFont(button.getFont().deriveFont(Font.BOLD, 24f));
            buttonPanel.add(button);
        }

        setLayout(new GridBagLayout());
        add(buttonPanel);

        setPreferredSize(new Dimension(P_WIDTH, P_HEIGHT));
    }

    private static void createAndShowGui() {
        Rough2 mainPanel = new Rough2();

        JFrame frame = new JFrame("Rough2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}