当我更改当前在 SWING 中可见的组件的布局管理器的属性时,这些更改不可见。如果我调整整个框架的大小,更改就会变得可见。
如何解决这个问题?我已经尝试过 revalidate() 和 friend ,但没有成功。另外,在更改布局属性的行之后的 LayoutFun.this.revalidate();
(mgr.setAlignment(align);
) 也没有任何帮助。
简短的 self 解释示例 - 当您按下按钮时,它的对齐方式应该改变。相反,什么也没有发生(在我的计算机上),只有当我调整整个框架的大小时,更改才会可见。
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();
关于java - FlowLayout 对齐方式更改在 Swing 中不直接可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900467/