Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序在调整窗口大小之前不会做出反应_Java_Layout_Jbutton - Fatal编程技术网

Java程序在调整窗口大小之前不会做出反应

Java程序在调整窗口大小之前不会做出反应,java,layout,jbutton,Java,Layout,Jbutton,我有一个简单的java程序,当我使用eclipse运行它时,它会显示我为布局设置的3个JButton。这些按钮用于更改布局的对齐方式。所以,按“左”键可左右对齐,按“右”键可右对齐,按“中心”键可居中对齐 当按钮执行此操作时,在调整窗口大小之前,窗口中的对齐方式不会改变 我尝试过更新jdk和eclipse,但都没有什么不同,我看不出代码本身有什么问题 有人知道这是为什么吗 导入javax.swing.JFrame public class Main { public static voi

我有一个简单的java程序,当我使用eclipse运行它时,它会显示我为布局设置的3个JButton。这些按钮用于更改布局的对齐方式。所以,按“左”键可左右对齐,按“右”键可右对齐,按“中心”键可居中对齐

当按钮执行此操作时,在调整窗口大小之前,窗口中的对齐方式不会改变

我尝试过更新jdk和eclipse,但都没有什么不同,我看不出代码本身有什么问题

有人知道这是为什么吗

导入javax.swing.JFrame

public class Main {
    public static void main(String []args){

        Layout_buttonsAndActionEvents layout = new Layout_buttonsAndActionEvents();

        layout.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        layout.setSize(300,300);
        layout.setVisible(true);



    }

}



import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Layout_buttonsAndActionEvents extends JFrame {

    private static final long serialVersionUID = 1L;
    private JButton leftButton;
    private JButton rightButton;
    private JButton centerButton;

    private FlowLayout layout;
    private Container container;

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


        leftButton = new JButton("Left");
        add(leftButton);
    //Align to the left
        leftButton.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent event){
                layout.setAlignment(FlowLayout.LEFT);
                layout.layoutContainer(container);
            }
        });


    centerButton = new JButton("Center");
    add(centerButton);

    //Align to the right
         centerButton.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent event){
                    layout.setAlignment(FlowLayout.CENTER);
                    layout.layoutContainer(container);
                }
            });

         rightButton = new JButton("Right");
        add(rightButton);

        //Align to the right
            rightButton.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent event){
                    layout.setAlignment(FlowLayout.RIGHT);
                    layout.layoutContainer(container);
                }
            });



    }


}

当您调整
JFrame
的大小时,它将使用新的大小和布局重新验证。同样,在添加修改后的布局后,必须验证并重新绘制框架,以应用视觉差异

更改布局后,请确保按以下顺序调用这些方法:

setLayout(layout);
repaint();
revalidate();

因为您正在将按钮添加到JFrame的内容中 窗格(通过add()方法,该方法实际上是对 getContentPane().add()在封面下)您需要在 内容窗格

在三个动作侦听器中,更改:

    layout.setAlignment(FlowLayout.XXX);
    layout.layoutContainer(container);
致:


此外,您可以删除对名为“container”的变量的所有引用,因为它在您的示例中不起任何作用。

更改对齐方式后是否重新打包窗口?是否可以发布代码?请不要在注释中。您可以编辑您的问题并将其添加到那里。很抱歉,第一次在Stack上询问任何问题时,此问题会添加到main或layout类中?@Yzma它将进入action listener。请确保将“frame”替换为您的
JFrame
对象的名称。它仍然只是在调整窗口大小后才更改对齐方式,我确定我已将其更改为您对doThank所说的内容。谢谢,这已经解决了它
    layout.setAlignment(FlowLayout.XXX);
    getContentPane().revalidate();