需要调整窗口大小才能使程序正常工作

时间:2012-07-31 12:13:34

标签: java swing resize layout-manager flowlayout

这是我的Layout类的代码。

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Layout extends JFrame {
    private JButton lb;
    private JButton cb;
    private JButton pb;
    private FlowLayout layout;
    private Container container;

    public Layout() {
        super("The Title");
        layout = new FlowLayout();
        container = new Container();
        setLayout(layout);

        //*Left
        lb = new JButton("L");
        add(lb);
        lb.addActionListener(
            new ActionListener(){   
                public void actionPerformed(ActionEvent event){
                    layout.setAlignment(FlowLayout.LEFT);
                    layout.layoutContainer(container);
                }
            }
        );
        //*Center
        cb = new JButton("C");
        add(cb);
        cb.addActionListener(
            new ActionListener(){   
                public void actionPerformed(ActionEvent event){
                    layout.setAlignment(FlowLayout.CENTER);
                    layout.layoutContainer(container);
                }
            }
        );      
        //*Right
        pb = new JButton("R");
        add(pb);
        pb.addActionListener(
            new ActionListener(){   
                public void actionPerformed(ActionEvent event){
                    layout.setAlignment(FlowLayout.RIGHT);
                    layout.layoutContainer(container);
                }
            }
        );
    }
}

我正在通过newboston youtube教程学习java(这段代码来自this教程)。但是这个并不像它应该的那样工作。当我单击右键(R)时,它应立即将所有按钮拖动到窗口的右侧。它没有。但是,当我单击右键然后强行调整窗口大小时,它会执行应有的操作。通过在main方法中添加setResizable(false),我无法调整程序的大小,因此它不起作用。 我做错了什么?

原谅我的英语不好。

2 个答案:

答案 0 :(得分:1)

替换

container = new Container();

通过

container = getContentPane();

答案 1 :(得分:0)

最简单的方法是设置一个新的FlowLayout并调用invalidate():

    setLayout(new FlowLayout(FlowLayout.LEFT));
    invalidate();
    validate();

更新当前的FlowLayout无效。