2012-01-18 270 views
1

我有下面的代碼,但我想要構造幾個特定大小的按鈕。我只是想知道如何做到這一點,因爲我谷歌搜索了它,發現了幾種不同的方法,但似乎沒有工作。有什麼建議?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

回答

2

看起來你正在邁出第一步搖擺。你所問的問題屬於gui設計領域,稱爲佈局。具體如何設置按鈕的位置取決於佈局。我建議你找到一個swing教程並貫穿它。我從Java Swing Trail開始:http://download.oracle.com/javase/tutorial/uiswing

在Java api文檔中查找BorderLayout和GridLayout。他們是最容易開始的。

2

從你的問題,我認爲你想讓按鈕適合窗口的大小。在這種情況下,您將使用window.add(button, BorderLayout.CENTER);

如果您嘗試使用多個按鈕,則需要使用佈局。使用佈局製作圖形用戶界面的教程可以在here找到。

2

一般而言,您可以使用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

0

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

1

你真的可以用不同的方式來改變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