FlowLayout 对齐更改在 Swing 中不直接可见
FlowLayout alignment changes are not directly visible in Swing
当我更改 属性 当前在 SWING 中可见的组件的布局管理器时,更改不可见。如果我调整整个框架的大小,更改就会可见。
如何解决这个问题?我已经尝试过 revalidate()
和朋友,但没有成功。在更改布局的 属性 (mgr.setAlignment(align);
) 的行之后的 LayoutFun.this.revalidate();
也没有任何帮助。
自我解释的简短示例 - 当您按下按钮时,它的对齐方式应该会改变。相反,什么也没有发生(在我的电脑上),只有当我调整整个框架的大小时,变化才会可见。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
public class LayoutFun extends JFrame {
public LayoutFun() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final FlowLayout mgr = new FlowLayout(FlowLayout.CENTER);
setLayout(mgr);
add(new JButton(new AbstractAction("Other alignment") {
@Override
public void actionPerformed(ActionEvent e) {
int align = mgr.getAlignment();
switch (align) {
case FlowLayout.CENTER:
align = FlowLayout.LEFT;
break;
case FlowLayout.LEFT:
align = FlowLayout.RIGHT;
break;
default:
case FlowLayout.RIGHT:
align = FlowLayout.CENTER;
break;
}
mgr.setAlignment(align);
}
}));
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
LayoutFun lst = new LayoutFun();
lst.setVisible(true);
lst.setSize(600, 400);
}
});
}
}
验证并重新绘制框架的可见部分,即 ContentPane
getContentPane().revalidate();
getContentPane().repaint();
当我更改 属性 当前在 SWING 中可见的组件的布局管理器时,更改不可见。如果我调整整个框架的大小,更改就会可见。
如何解决这个问题?我已经尝试过 revalidate()
和朋友,但没有成功。在更改布局的 属性 (mgr.setAlignment(align);
) 的行之后的 LayoutFun.this.revalidate();
也没有任何帮助。
自我解释的简短示例 - 当您按下按钮时,它的对齐方式应该会改变。相反,什么也没有发生(在我的电脑上),只有当我调整整个框架的大小时,变化才会可见。
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
public class LayoutFun extends JFrame {
public LayoutFun() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final FlowLayout mgr = new FlowLayout(FlowLayout.CENTER);
setLayout(mgr);
add(new JButton(new AbstractAction("Other alignment") {
@Override
public void actionPerformed(ActionEvent e) {
int align = mgr.getAlignment();
switch (align) {
case FlowLayout.CENTER:
align = FlowLayout.LEFT;
break;
case FlowLayout.LEFT:
align = FlowLayout.RIGHT;
break;
default:
case FlowLayout.RIGHT:
align = FlowLayout.CENTER;
break;
}
mgr.setAlignment(align);
}
}));
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
LayoutFun lst = new LayoutFun();
lst.setVisible(true);
lst.setSize(600, 400);
}
});
}
}
验证并重新绘制框架的可见部分,即 ContentPane
getContentPane().revalidate();
getContentPane().repaint();