我正在尝试使用一个按钮制作一个JFrame,但是我的按钮没有我想要的文字!我在按钮构造函数中设置它然后用setText设置它,但它仍然没有出现!此外,按钮填充整个框架,有没有办法使它不粘在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 :(得分:4)
为什么它适用于我而不适合你? (使用其他人建议的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);
}
}
修改强>
Action
需要一个标题。如果您没有指定,按钮将没有标题。如果你这样做了
eightButton.setAction(new buttonAction(), "8");
它会起作用。
答案 1 :(得分:3)
使用尊重组件首选大小的布局管理器
mainWindow.setLayout(new FlowLayout(FlowLayout.CENTER));
答案 2 :(得分:2)
Swing组件在添加到窗口时需要布局管理器上下文。
默认布局是BorderLayout,这就是为什么你会得到那种奇怪的行为。只有一个元素,BorderLayout用该元素填充窗格。
尝试使用FlowLayout或AbsoluteLayout(或null)
http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html
答案 3 :(得分:2)
使用另一个LayoutManager
默认框架的布局管理器为BorderLayout
,如果添加没有指定的组件,则会添加到中心。您可以使用FlowLayout
。请参阅SwingUtilities.invokeLater
的示例,确保它将在EDT
中运行。
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainWindow = new JFrame("8 Game");
mainWindow .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setLayout(new FlowLayout());
mainWindow.setLocationRelativeTo(null);
JButton eightButton = new JButton("8");
eightButton.setText("8");
eightButton.setContentAreaFilled(false);
eightButton.setAction(new buttonAction());
mainWindow.add(eightButton);
mainWindow.pack();
mainWindow.setVisible(true);
}
});
}
在官方教程How to use Buttons
中查看更完整正确的示例