我正在尝试用 Java 创建一个菜单。我有 4 个按钮。我想让菜单在 X 轴和 Y 轴上居中。我只需将它与 X 轴居中即可。 setAlignmentY()、setLocation() 不起作用。你可以帮帮我吗?谢谢。
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class Menu extends JFrame
{
private static JFrame frame;
private static JPanel myPanel;
private JButton button1;
private JButton button2;
private JButton button3;
private JButton button4;
public Menu()
{
myPanel = new JPanel();
button1 = new JButton("Read From File");
button1.setMaximumSize(new Dimension(122, 50));
button1.setAlignmentX(JButton.CENTER_ALIGNMENT);
button2 = new JButton("Start Animation");
button2.setMaximumSize(new Dimension(122, 50));
button2.setAlignmentX(JButton.CENTER_ALIGNMENT);
button3 = new JButton("Help");
button3.setMaximumSize(new Dimension(122, 50));
button3.setAlignmentX(JButton.CENTER_ALIGNMENT);
button4 = new JButton("Quit");
button4.setMaximumSize(new Dimension(122, 50));
button4.setAlignmentX(JButton.CENTER_ALIGNMENT);
SimpleListener ourListener = new SimpleListener();
button1.addActionListener(ourListener);
button2.addActionListener(ourListener);
button3.addActionListener(ourListener);
button4.addActionListener(ourListener);
myPanel.add(button1);
myPanel.add(button2);
button2.setEnabled(false);
myPanel.add(button3);
myPanel.add(button4);
myPanel.setLayout(new BoxLayout(myPanel,BoxLayout.Y_AXIS));
myPanel.setBorder(BorderFactory.createTitledBorder("OPTIONS"));
myPanel.setBackground(Color.decode("#82CAFF"));
}
private class SimpleListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String buttonName = e.getActionCommand();
boolean readFile = false;
if (buttonName.equals("Read From File"))
{
if( readFile == true ){
button2.setEnabled(true); }
else
{
JOptionPane.showMessageDialog(frame, "File couldn't be read!");
}
}
else if (buttonName.equals("Start Animation"))
JOptionPane.showMessageDialog(frame, "Nice Try!");
else if (buttonName.equals("Help"))
JOptionPane.showMessageDialog(frame, "Ontirismo maykilino cino! Ay em kino!" );
else if (buttonName.equals("Quit"))
System.exit(0);
}
}
public static void main(String s[])
{
Menu gui = new Menu();
frame = new JFrame("BILLIARDINATOR 5000 MENU");
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{System.exit(0);}});
frame.getContentPane().add(myPanel);
frame.setPreferredSize(new Dimension(400, 400));
frame.setLocation(600,200);
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
}
最佳答案
您可以使用GridBagLayout。这很可怕,但它确实有效。
myPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = 0;
gbc.fill = GridBagConstraints.BOTH;
// change setMaximumSize to setPreferredSize for all buttons
button1.setPreferredSize(new Dimension(122, 50)); // etc
// increase Y coordinate after adding a button
myPanel.add(button1, gbc);
++gbc.gridy;
myPanel.add(button2, gbc);
++gbc.gridy;
myPanel.add(button3,gbc);
++gbc.gridy;
myPanel.add(button4, gbc);
++gbc.gridy;
// And of course, remove the BoxLayout.
关于java - Java 中的居中菜单按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681161/