如何将按钮准确定位在我想要的位置。 我有一个背景图像设置到主面板。然后两个按钮在彼此旁边但是我希望它们在中心。像主菜单一样在彼此之上。
我已经尝试了所有方法,通过使用Box Layout,我得到的最接近的是什么。以下是它的外观代码和图像。但我需要按钮位于中心。
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);
}
答案 0 :(得分:2)
Nest JPanels
GridLayout(0, 1, 0, vertGap)
的JPanel中,代表一个行数可变的网格,1列,0个水平间隙(因为只有一列)和vertGap垂直间隙 - 一个int 你必须决定的价值。 setOpaque(false)
将其设置为非透明。 答案 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);