当我用Java swing编译代码时,我得到了默认的Bounds。占据整个帧大小的按钮。我尝试了3个按钮。首先,我将最后一个按钮设置为默认按钮,然后删除上一个按钮,然后再将两个按钮中的一个按钮设置为默认按钮,就像上一个一样。请帮我解决这个问题。
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帧中,按钮将并排放置。 实际结果:默认为一个按钮。
答案 0 :(得分:1)
您正在调用f.setVisible(true)
之前,然后设置了布局管理器,因此GUI使用JFrame的默认BorderLayout进行显示-表示仅显示最后添加的组件。
可怜的解决方案是先设置布局。
一种更好的解决方案是学习然后适当使用布局管理器。
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());
}
}