JButton没有显示文字;填充JFrame

时间:2014-01-14 18:19:57

标签: java swing layout-manager

我正在尝试使用一个按钮制作一个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);
    }
}

4 个答案:

答案 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);
    }
}

enter image description here


修改

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

中查看更完整正确的示例