2012-10-30 75 views
4

我试着use this,它不工作Java的按钮宽度

singleplayerButton.setBounds(20, 20, 200, 100); 

我不知道为什么,虽然,任何人可以帮助我这个?

我的整个页面的代码是here

package gmine; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class gmine implements ActionListener { 
     JFrame interfaceFrame; 
     JButton singleplayerButton, multiplayerButton, optionsButton, quitButton; 

     public gmine() { 
       JFrame.setDefaultLookAndFeelDecorated(false); 
       interfaceFrame = new JFrame("G-Mine B0.4"); 
       interfaceFrame.setSize(800,600); 
       interfaceFrame.setLayout(new GridLayout(9,1, 20, 15)); 

       singleplayerButton = new JButton("SinglePLayer"); 
       singleplayerButton.addActionListener(this); 
       interfaceFrame.add(singleplayerButton); 
       singleplayerButton.setBounds(20, 20, 200, 100); 

       multiplayerButton = new JButton("MultiPlayer"); 
       multiplayerButton.addActionListener(this); 
       interfaceFrame.add(multiplayerButton); 

       optionsButton = new JButton("Options"); 
       optionsButton.addActionListener(this); 
       interfaceFrame.add(optionsButton); 

       quitButton = new JButton("Quit"); 
       quitButton.addActionListener(this); 
       interfaceFrame.add(quitButton); 

       interfaceFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       interfaceFrame.setVisible(true); 
     } 

     public void actionPerformed(ActionEvent a) { 

     } 

     public static void main(String[] args) { 
       new gmine(); 
     } 
} 

IM试图完成使按键更小,所以不触及页面的一侧。

+1

哪里是代码? –

+0

你想用这行代码来达成什么目标? – brimborium

回答

9

我个人会使用一个布局管理器,它可以让您更灵活地决定如何布置按钮,并尽可能地遵守组件的首选大小,但可以根据需要自由调整。 ..

对于我来说,这是GridBagLayout

enter image description here

public class ButtonsLayout { 

    public static void main(String[] args) { 
     new ButtonsLayout(); 
    } 

    public ButtonsLayout() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new MenuPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class MenuPane extends JPanel { 

     public MenuPane() { 
      setLayout(new GridBagLayout()); 

      JButton singleplayerButton = new JButton("SinglePLayer"); 
      JButton multiplayerButton = new JButton("MultiPlayer"); 
      JButton optionsButton = new JButton("Options"); 
      JButton quitButton = new JButton("Quit"); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.ipadx = 20; 
      gbc.ipady = 20; 

      add(singleplayerButton, gbc); 
      gbc.gridy++; 
      add(multiplayerButton, gbc); 
      gbc.gridy++; 
      add(optionsButton, gbc); 
      gbc.gridy++; 
      add(quitButton, gbc); 
     } 
    } 
} 

在这里,我用ipadx和的ipady 0以通过布局管理器增加组件的宽度和高度,以及使用填充使所有组件的宽度相同。

看一看

欲了解更多信息

+1

这真棒,即时通讯将使用此。谢谢 – Dianamu

+0

请参阅下面的答案。 – Dianamu

4
  • 首先,当你使用LayoutManager,则组件的位置,其大小由当组件被放置在直接父CompoenentLayoutManager控制 ..
    例如:
    在JFrame上放置一个JButton,然后JFrame的LayoutManager控制JButton的位置和大小。

  • 我还建议您使用由NetBeans团队在2005年开发的GroupLayout,并且您可以使用现在免费从Google获得的WindowsBuilderPro

2

GridLayout管理器将给予所有组件相同的大小。您可以尝试使用不同的布局管理器,然后在组件上使用setPreferredSize(Dimension preferredSize)来正确调整它们的大小。

作为一个不同的例子,您也可以在您的JFrame之上放置一个JPanel并将按钮放置在那里。

+1

就个人而言,如果可能的话,我会避免使用'setPreferredSize',它会直接导致出现不同外观和感觉以及字体和DPI问题差异的问题......它几乎与'null'布局差不多......) - 恕我直言 – MadProgrammer

+0

有关详细信息,请参阅[Q&A](http://stackoverflow.com/q/7229226/230513)。 – trashgod

1

我试着用上面的答案之一。现在程序不会显示。它只是终止。

package gmine; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class gmine { 
     JFrame interfaceFrame; 
     JButton singleplayerButton, multiplayerButton, optionsButton, quitButton; 


    public void ButtonsLayout() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("G-Mine"); 
       interfaceFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       interfaceFrame.setLayout(new BorderLayout()); 
       interfaceFrame.setSize(800,600); 
       interfaceFrame.add(new MenuPane()); 
       interfaceFrame.pack(); 
       interfaceFrame.setLocationRelativeTo(null); 
       interfaceFrame.setVisible(true); 
      } 
     }); 
    } 

    public class MenuPane extends JPanel { 

     public MenuPane() { 
      setLayout(new GridBagLayout()); 

      JButton singleplayerButton = new JButton("SinglePLayer"); 
      JButton multiplayerButton = new JButton("MultiPlayer"); 
      JButton optionsButton = new JButton("Options"); 
      JButton quitButton = new JButton("Quit"); 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.fill = GridBagConstraints.HORIZONTAL; 
      gbc.ipadx = 20; 
      gbc.ipady = 20; 

      add(singleplayerButton, gbc); 
      gbc.gridy++; 
      add(multiplayerButton, gbc); 
      gbc.gridy++; 
      add(optionsButton, gbc); 
      gbc.gridy++; 
      add(quitButton, gbc); 
     } 
    } 
    public static void main(String[] args) { 
     new gmine(); 
    } 

}

+0

没有构造函数。尝试改变'公共void ButtonsLayout()''公共gmine' – MadProgrammer

+0

好生病尝试 – Dianamu

+0

我这样做,我在我的控制台得到这个。 – Dianamu