使用null布局显示按钮时出现问题

时间:2018-04-19 13:31:27

标签: java swing

我正在尝试在窗口底部显示一个带有图像背景和按钮的窗口。我选择使用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);
}

1 个答案:

答案 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 );