Java - 如何使用Swing编辑按钮的大小和位置?

问题描述:

我有下面的代码,但我想要构造几个特定大小的按钮。我只是想知道如何做到这一点,因为我谷歌搜索了它,发现了几种不同的方法,但似乎没有工作。有什么建议?Java - 如何使用Swing编辑按钮的大小和位置?

import javax.swing.*; 

public class GUI { 

    public static void main(String[] args) { 

     JFrame window = new JFrame(); 
     window.setSize(500, 500); 
     window.setTitle("My Application"); 

     JButton button = new JButton("click me"); 
     window.add(button); 

     window.setVisible(true); 

    } 

} 
+1

你需要给你的问题的更多细节是可以回答的。 – 2012-01-18 01:24:25

看起来你正在迈出第一步摇摆。你所问的问题属于gui设计领域,称为布局。具体如何设置按钮的位置取决于布局。我建议你找到一个swing教程并贯穿它。我从Java Swing Trail开始:http://download.oracle.com/javase/tutorial/uiswing

在Java api文档中查找BorderLayout和GridLayout。他们是最容易开始的。

从你的问题,我认为你想让按钮适合窗口的大小。在这种情况下,您将使用window.add(button, BorderLayout.CENTER);

如果您尝试使用多个按钮,则需要使用布局。使用布局制作图形用户界面的教程可以在here找到。

一般而言,您可以使用setLocationsetSize方法。但是,最好使用布局管理器。检查Using Layout Managers教程。在你的情况下默认使用BorderLayout。如果你想要一个绝对的布局,可以将其设置:

window.setLayout(null); 

然后,你必须指定容器中的每个组件的大小和位置。

编辑:

请注意,使用absolute layout可能会很复杂,一般是可以避免的。有些想法参见A Visual Guide to Layout Managers

+2

你甚至不应该向刚刚开始学习Swing的人(实际上,一般没有人)推荐'null'布局。只要学习使用可用的布局 – Robin 2012-01-18 07:17:37

JButton延伸的AbstractButton这又延伸JComponent,因此,由于是继承的情况下,可以使用由JComponent提供的所有方法。

你应该考虑相关的方法有:

setMaximumSize(Dimension maximumSize) Sets the maximum size of this component to a constant value. 
setMinimumSize(Dimension minimumSize) Sets the minimum size of this component to a constant value. 

此外,JComponent延伸Component提供,并且可以使用,

setSize(Dimension d) Resizes this component so that it has width d.width and height d.height. 
setSize(int width, int height) Resizes this component so that it has width width and height height. 

看到继承下面:

java.awt.Component 
    java.awt.Container 
     javax.swing.JComponent 
      javax.swing.AbstractButton 
       javax.swing.JButton 
+0

-1 a)永远不会使用任何setXXSize(XX = min/pref/max)b)永远不会做手动调整大小/定位 – kleopatra 2012-01-18 08:19:48

你真的可以用不同的方式来改变JButton的大小,但在swing中这样做并不是一个好习惯,并且明确地给不同的组件大小值。你最好开始学习Layout Managers。如果你还会了解Concurrency in Swing,它会更聪明。

JFrame的默认布局是BorderLayout,因为JPanel的默认值是FlowLayout。 至于你的问题,我能想到的是如下最简单的方法:

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.SwingUtilities; 

public class GUI { 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        /* 
        * THe default Layout for the JFrame is the BorderLayout. 
        * Since you said you have some buttons, so I am giving 
        * you some idea how various buttons can be added to the 
        * JFrame, with different values. 
        */ 
        JFrame window = new JFrame(); 
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        window.setLocationRelativeTo(null); 
        window.setTitle("My Application"); 

        JButton button1 = new JButton("Button1"); 
        window.add(button1, BorderLayout.PAGE_START);     

        JButton button2 = new JButton("Button2"); 
        window.add(button2, BorderLayout.WEST); 

        JButton button3 = new JButton("Button3"); 
        window.add(button3, BorderLayout.CENTER); 

        JButton button4 = new JButton("Button4"); 
        window.add(button4, BorderLayout.EAST); 

        JButton button5 = new JButton("Button5"); 
        window.add(button5, BorderLayout.PAGE_END); 

        window.pack(); 
        window.setVisible(true); 
       } 
      }); 

    } 

} 

希望这可以帮助你以某种方式。

Regards