2012-12-03 71 views
1

我試圖用Java創建菜單。我有4個按鈕。我想將菜單同時定位在X軸和Y軸上。我可以將它與X軸對齊。 setAlignmentY(),setLocation()不起作用。你可以幫幫我嗎?謝謝。Java中的中心菜單按鈕

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

} 

回答

0

您可以使用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. 
0

要指定組件的自定義位置,你可能想使用佈局面板上。

myPanel.setLayout(null); 
+0

我試過但沒有工作。 –