如何定位按钮?

时间:2015-03-29 12:05:14

标签: java swing button position awt

如何将按钮准确定位在我想要的位置。 我有一个背景图像设置到主面板。然后两个按钮在彼此旁边但是我希望它们在中心。像主菜单一样在彼此之上。

我已经尝试了所有方法,通过使用Box Layout,我得到的最接近的是什么。以下是它的外观代码和图像。但我需要按钮位于中心。

http://puu.sh/gTZgQ/c06f09416c.jpg

public Menu() {
    JFrame frame = new JFrame("Fruit Catcher");
    JPanel panel = new JPanel();

    frame.add(panel);


    ImageIcon junglebackground = new ImageIcon("junglebackground.jpg");
    JLabel backgroundimage = new JLabel(junglebackground);

    frame.add(backgroundimage);
    frame.setSize(700,470);
    frame.setResizable(false);
    frame.setVisible(true);


    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));        

    JButton Play = new JButton("Play");
    JButton Scoreboard = new JButton("Scoreboard");
    Play.setAlignmentX(Component.CENTER_ALIGNMENT);
    JLabel gap = new JLabel("\n");
    Scoreboard.setAlignmentX(Component.CENTER_ALIGNMENT);


    buttonPanel.add(Play);
    buttonPanel.add(gap);
    buttonPanel.add(Scoreboard);



    frame.add(buttonPanel);


}

3 个答案:

答案 0 :(得分:2)

Nest JPanels

  • 将按钮放在使用GridLayout(0, 1, 0, vertGap)的JPanel中,代表一个行数可变的网格,1列,0个水平间隙(因为只有一列)和vertGap垂直间隙 - 一个int 必须决定的价值。
  • 然后将此JPanel放入主JPanel。
  • 如果您希望它位于顶部并居中,您可以让主JPanel使用其默认的FlowLayout。
  • 如果您希望使用JPanel通过GridLayout显示图像,请务必通过调用setOpaque(false)将其设置为非透明。
  • 最重要的是,请阅读Swing教程中如何使用布局管理器。您可以在此处找到Swing教程和其他Swing资源的链接:Swing Info

答案 1 :(得分:1)

你应该进一步阅读有关摇摆的任何介绍。稍后,他们必然会谈论 Layouts ,它们是定义按钮应如何放置在窗口中的方法。

你所描述的内容听起来像你可以通过一些网格布局来解决它,但很难猜出你究竟需要什么,所以如果你自己发现它可能是最好的。

答案 2 :(得分:1)

由于您知道背景图像比想要显示的按钮大,因此您可以将JLabel用作按钮的容器。基本代码是:

JFrame frame = new JFrame("Fruit Catcher");

ImageIcon jungleBackground = new ImageIcon("junglebackground.jpg");
JLabel backgroundImage = new JLabel(junglebackground);
frame.add( backgroundImage)

现在您需要将标签添加到标签中。两个选项:

在标签上使用BoxLayout

backgroundImage.setLayout(new BoxLayout(backgroundImage, BoxLayout.Y_AXIS));  
backgroundImage.add( Box.createVerticalGlue() );
backgroundImage.add( new JButton("Play") );
backgroundImage.add( Box.createVerticalStrut(20) );
backgroundImage.add( new JButton("Scoreboard") );
backgroundImage.add( Box.createVerticalGlue() );

阅读How to Use Box Layout上Swing教程中的部分,了解更多信息和示例。

另一种选择是在标签上使用GridBagLayout

backgroundImage.setLayout( new GridBagLayout() );
GridBagConstraints gbc = new GridBagConstraints();

backgroundImage.add(new JButton("Play"), gbc);
gbc.gridy = 1;
gbc.insets = new Insets(10, 0, 0, 0);
backgroundImage.add(new JButton("Scoreboard"), gbc);

请勿忘记阅读本教程,了解有关GridBagConstraints

的更多信息

最后,将所有组件添加到框架后,您将执行以下操作:

frame.pack();
frame.setResizable(false);
frame.setVisible(true);