当我更改SWING中当前可见的组件的布局管理器的属性时,更改不可见。如果我调整整个框架的大小,则更改会变得可见。
如何解决这个问题?我已经尝试了revalidate()
和朋友,但没有成功。在布局属性更改的行(LayoutFun.this.revalidate();
)之后的mgr.setAlignment(align);
也没有任何帮助。
简短的自我解释示例 - 当您按下按钮时,它的对齐应该会改变。相反,没有任何事情发生(在我的计算机上),只有当我调整整个框架的大小时,更改才会显示。
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);
}
});
}
}
答案 0 :(得分:3)
验证&重新绘制框架的可见部分,即ContentPane
getContentPane().revalidate();
getContentPane().repaint();