2014-01-14 86 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