Simple Swing示例 - 方法排序导致无输出

时间:2015-02-20 06:39:31

标签: java swing jframe layout-manager null-layout-manager

我是Swing的新手。昨天我陷入了困境。

代码: -

JFrame f = new JFrame();
JButton b = new JButton("CLICK");
b.setBounds(130,100,100,40);
f.add(b);
f.setSize(400,500);//1st
f.setLayout(null);//2nd
f.setVisible(true);//3rd

当我运行上面的代码时,它会显示一个名为" CLICK"的按钮的输出。放在框架内。但是,如果我重新排序这样的最后3种方法:

f.setVisible(true);
f.setLayout(null);
f.setSize(400,500);

然后,显示框架内部没有按钮。 为什么?

3 个答案:

答案 0 :(得分:2)

修复不使用布局管理器的问题的方法是 使用 布局管理器。

例如,此GUI使用布局,边距和填充来实现与第一个GUI中相同的基本外观。

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class ButtonGui {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("Button GUI");
                JButton b = new JButton("CLICK");

                // adjust numbers to requirement
                b.setMargin(new Insets(12, 35, 12, 35));
                // since a button has a border, we need a panel to which
                // we can add a 2nd (empty) border.
                JPanel p = new JPanel(new GridLayout());
                // adjust numbers to requirement
                p.setBorder(new EmptyBorder(100, 130, 100, 130));
                p.add(b);
                f.add(p);
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 1 :(得分:-1)

.setVisible(true)始终是最后一个方法调用。设置swing组件的特征,然后使用此方法告诉它显示自己。 HTH。

答案 2 :(得分:-1)

我遇到了同样的问题。 以下列方式尝试代码..

f.setSize(800,800);
f.setLayout(null);
f.setVisible(true);

用于eclipse.works罚款!!!