gpt4 book ai didi

java - FlowLayout 对齐更改在 Swing 中不直接可见

转载 作者:行者123 更新时间:2023-11-30 08:13:36 26 4
gpt4 key购买 nike

当我更改当前在 SWING 中可见的组件的布局管理器的属性时,更改不可见。如果我调整整个框架的大小,就会看到更改。

如何解决这个问题?我尝试过 revalidate() 和 friend ,但没有成功。在布局属性更改 (mgr.setAlignment(align);) 之后的 LayoutFun.this.revalidate(); 也没有任何帮助。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com