2014-01-14 134 views
0

我想使用它的按鈕,但我的按鈕沒有我想要的文本JFrame!我將它設置在按鈕構造函數中,然後用setText設置,但它仍然不顯示!此外,按鈕填充整個框架,有沒有辦法讓它不堅持JFrame的邊緣?JButton不顯示文字;填充JFrame

import javax.swing.*; 

public class main 
{ 
    public static void main(String[] args) 
    { 
     JFrame mainWindow = new JFrame("8 Game"); 
     mainWindow.setSize(200, 200); 
     JButton eightButton = new JButton("8"); 
     eightButton.setText("8"); 
     eightButton.setSize(30, 30); 
     eightButton.setBounds(5, 5, 25, 25); 
     eightButton.setContentAreaFilled(false); 
     eightButton.setAction(new buttonAction()); 
     mainWindow.add(eightButton); 
     mainWindow.setVisible(true); 
    } 
} 
+0

一個JFrame的默認佈局管理器是BorderLayout,它並不真正關心你在你的JButton設定的範圍。 –

+0

看看[如何使用按鈕](http://docs.oracle.com/javase/tutorial/uiswing/components/button.html) – nachokk

回答

3

爲什麼它爲我工作,而不是你? (用的FlowLayout他人

import java.awt.FlowLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class main 
{ 
    public static void main(String[] args) 
    { 
     JFrame mainWindow = new JFrame("8 Game"); 
     mainWindow.setLayout(new FlowLayout(FlowLayout.CENTER)); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.setSize(200, 200); 
     JButton eightButton = new JButton("8"); 
     eightButton.setText("8"); 
     eightButton.setSize(30, 30); 
     eightButton.setBounds(5, 5, 25, 25); 
     //eightButton.setAction(new buttonAction()); 
     //eightButton.setContentAreaFilled(false); 


     mainWindow.add(eightButton); 
     mainWindow.setVisible(true); 
    } 
} 

enter image description here

建議

編輯

Action需要一個冠軍。如果沒有指定,該按鈕將沒有標題。如果你這樣做

eightButton.setAction(new buttonAction(), "8"); 

它會工作。

+0

WTF,blame setAction!爲什麼?!刪除setAction工作! – Pwnie2012

+1

動作需要一個標題。如果你沒有指定一個,你的按鈕不會顯示任何東西 –

3

使用尊重組件的首選大小

mainWindow.setLayout(new FlowLayout(FlowLayout.CENTER)); 
+0

我刪除了邊框,但保留了尺寸,30 * 30和也用130 * 130進行測試。現在窗口看起來像這樣(仍然沒有文字):http://puu.sh/6kRx9.jpg – Pwnie2012

+0

刪除'setSize'和'setBounds'調用按鈕 – Reimeus

+0

沒有改變任何東西:( – Pwnie2012

2

Swing組件期待一個佈局管理器上下文的時候都加入到窗口的佈局管理器。

默認佈局是BorderLayout,這就是爲什麼你會得到這種奇怪的行爲。只有一個元素,BorderLayout使用該元素填充窗格。

嘗試類似的FlowLayout或AbsoluteLayout(或空)

http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html

2

使用另一個LayoutManager默認框架的佈局管理器是BorderLayout,如果添加一個沒有規範的組件將添加到中心。您可以使用FlowLayout。請參閱SwingUtilities.invokeLater示例,確保它將在EDT中運行。

​​

看一看更完整正確的例子在官方教程How to use Buttons