Java JButton不显示文本;填充JFrame
我正在尝试制作一个带有按钮的JFrame,但是我的按钮没有我想要的文本!我在button构造函数中设置它,然后使用setText,但它仍然没有显示!此外,按钮填充整个框架,有没有办法使其不粘到框架的边缘Java JButton不显示文本;填充JFrame,java,swing,layout-manager,Java,Swing,Layout Manager,我正在尝试制作一个带有按钮的JFrame,但是我的按钮没有我想要的文本!我在button构造函数中设置它,然后使用setText,但它仍然没有显示!此外,按钮填充整个框架,有没有办法使其不粘到框架的边缘 import javax.swing.*; 公共班机 { 公共静态void main(字符串[]args) { JFrame主窗口=新JFrame(“8游戏”); 主窗口。设置大小(200200); JButton eightButton=新JButton(“8”); 设置文本(“8”); 八按
import javax.swing.*;
公共班机
{
公共静态void main(字符串[]args)
{
JFrame主窗口=新JFrame(“8游戏”);
主窗口。设置大小(200200);
JButton eightButton=新JButton(“8”);
设置文本(“8”);
八按钮设置尺寸(30,30);
八个按钮。立根(5,5,25,25);
eightButton.setContentAreaFilled(假);
设置操作(新按钮操作());
主窗口。添加(八个按钮);
mainWindow.setVisible(true);
}
}
使用符合组件首选尺寸的布局管理器
mainWindow.setLayout(new FlowLayout(FlowLayout.CENTER));
Swing组件在添加到窗口时需要布局管理器上下文 默认布局是BorderLayout,这就是为什么会出现这种奇怪的行为。只有一个元素时,BorderLayout会用该元素填充窗格 尝试FlowLayout或AbsoluteLayout(或null)之类的方法
为什么它对我有效而对你无效?(采用其他人建议的流程布局)
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);
}
}
编辑
操作
需要标题。如果未指定标题,则按钮将没有标题。如果您这样做
eightButton.setAction(new buttonAction(), "8");
它会起作用。使用另一个
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);
}
});
}
看看官方教程中更完整的正确示例JFrame的默认布局管理器是BorderLayout,它并不真正关心您在JButton上设置的边界。看看我删除了边界,但保留了30*30的大小,并且使用130*130进行了测试。现在窗口看起来是这样的(仍然没有文本):删除按钮的
setSize
和setBounds
调用请勿更改任何内容:(在setVisible()之前调用pack()
)
@Pwnie2012在我测试它时运行得很好,你在运行更新的代码吗?WTF,责怪setAction!为什么?!删除setAction有效!Action需要一个标题。如果你没有指定标题,你的按钮将不会显示任何内容