我有一个简单的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);
}
});
}
}
答案 0 :(得分:1)
因为您要将按钮添加到JFrame的内容中 窗格(通过add()方法实际上是一个调用 getContentPane()。在封面下添加())你需要调用revalidate() 内容窗格。
在三个动作侦听器中,更改:
layout.setAlignment(FlowLayout.XXX);
layout.layoutContainer(container);
为:
layout.setAlignment(FlowLayout.XXX);
getContentPane().revalidate();
此外,您可以删除对名为“container”的变量的所有引用,因为它在您的示例中不执行任何操作。
答案 1 :(得分:0)
调整JFrame
的大小时,会使用新的大小和布局重新验证它。同样,您必须在添加更改的布局后验证并重新绘制框架以应用视觉差异。
确保在更改布局后按此顺序调用这些方法:
setLayout(layout);
repaint();
revalidate();