我正在尝试在窗口底部显示一个带有图像背景和按钮的窗口。我选择使用null布局,以便我可以按照我想要的方式定位按钮 - 我没有发现任何其他布局效果不错,但是当我运行方法来显示窗口时,它看起来像{{3 }}
public static void inGame() {
BackgroundImg panel = new BackgroundImg (Toolkit.getDefaultToolkit().getImage("C:\\Simulator\\gamebg.png"));
panel.setLayout(null);
JButton sButton = new JButton("save");
sButton.setBounds(0, 811, 80, 35);
sButton.setBackground(Color.WHITE);
sButton.setFocusable(false);
sButton.setFont(h3);
JButton lButton = new JButton("load");
sButton.setBounds(50, 809, 80, 35);
lButton.setBackground(Color.WHITE);
lButton.setFocusable(false);
lButton.setFont(h3);
JButton mButton = new JButton("menu");
sButton.setBounds(150, 809, 80, 35);
mButton.setBackground(Color.WHITE);
mButton.setFocusable(false);
mButton.setFont(h3);
JButton qButton = new JButton("quit");
sButton.setBounds(200, 809, 80, 35);
qButton.setBackground(Color.WHITE);
qButton.setFocusable(false);
qButton.setFont(h3);
panel.add(sButton);
panel.add(lButton);
panel.add(mButton);
panel.add(qButton);
jfrm.getContentPane().add(panel);
def();
jfrm.setVisible(true);
}
这里是BackgroundImg类(我之前使用过它,它工作正常)
public class BackgroundImg extends JPanel{
private Image img;
public BackgroundImg(String img) {
this(new ImageIcon(img).getImage());
}
public BackgroundImg(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
}
}
这是创建基本窗口框架的def方法
public static void def() {
jfrm.setIconImage(icon.getImage());
jfrm.setSize(1400, 900);
jfrm.setResizable(false);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
答案 0 :(得分:0)
我选择使用null布局,以便我可以按照我想要的方式定位按钮
根据您的代码,您只是尝试将按钮放在一行中。没有理由使用null布局。
使用适当的布局来定位按钮。这可以通过FlowLayout
轻松完成。
基本代码是:
JPanel buttonsPanel = new JPanel();
buttonsPanel.setOpaque( false );
buttonsPanel.add(saveButton);
buttonsPanel.add(loadButton);
...
BackgroundImg background = new BackgroundImg(...);
background.setLayout( new BorderLayout() );
background.add(buttonsPanel, BorderLayout.PAGE_END);
frame.add( background );