java - 向其中删除/添加组件时,面板会展开

标签 java swing mouselistener

当我将此代码提供给 MouseListener 接口(interface)中的 mouseClicked 方法时, changeableContentPanel 已展开。有人可以帮助我吗?

if (!changeableContentPanel.isAncestorOf(aMO)) {
    aMO = new AccountsManagementOptions();
    changeableContentPanel.removeAll();                
    changeableContentPanel.validate();
    changeableContentPanel.repaint();
    aMO.setLocation(5, 100);
    changeableContentPanel.add(aMO);
    changeableContentPanel.validate();
    changeableContentPanel.repaint();
}

最佳答案

当您删除/添加组件到面板时,您应该使用:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

也就是说,您应该使用 revalidate() 而不是 validate(),并且只需在对面板进行所有更改后调用代码一次。

the changeableContentPanel is expanded.

是的,因为布局管理器被调用,面板的大小将根据添加到面板的组件的大小重新计算。

Could anyone help me?

如果您不希望大小发生变化,那么您应该在面板上使用CardLayout。面板尺寸将固定为添加到面板的最大卡片的尺寸。然后你只需交换组件即可。

阅读 Swing 教程中关于 How to Use CardLayout 的部分了解更多信息和工作示例。

关于java - 向其中删除/添加组件时,面板会展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53043756/

相关文章:

java - 关于 JPanels 和菜单的最佳选择

java - 计算字符串中唯一字母的数量

Java鼠标监听器

java - 单击时使用 MouseListener 移动图像

java - IntelliJ 想法 : build and run Java apps in docker containers

java - 模式中前两个字段的 key 未发送

java - 用SwingWorker在Swing中延迟加载jList需要Thread.sleep()

Java,更改从同一面板声明创建的 4 个面板之一上的标签文本

Java Swing JFileChooser 将文件附加到 JTextArea

java - 鼠标右键事件