我已经搜索了这个问题,但没有找到任何接近的东西。我将尝试具体并发布代码,但是这是一个大型程序,因此我无法发布所有代码。一般的问题是这样的:一个面板上的 JButton 会导致另一个面板上的组件在第一次单击时移动。仅当按钮添加了动作侦听器时才会发生这种情况。(在没有动作监听器的情况下单击按钮(显然))。问题是我添加的动作监听器仅更改按钮背景、文本和大小(以适应新文本)。
这是目前的动作监听器。登录是 JButton:
private class LoginListener implements ActionListener{
public void actionPerformed(ActionEvent e){
loggedIn = !loggedIn;
if(loggedIn){
login.setText("Logout");
login.setBackground(Constants.RED);
}
else{
login.setText("Login");
login.setBackground(Constants.UPPER_BOUNDARY);
}
login.setSize(login.getPreferredSize());
}
}
设置是这样的。动作监听器是登录按钮所在的 loginPanel 的子类。该 loginPanel 被添加到主 JFrame 框架的上 1/4 处。主 JFrame 的下 3/4 是 mainPanel,其中包含其他摆动组件。loginPanel 和 mainPanel 不共享组件或变量,也不真正知道彼此的存在(据我编码)。然而,当上面的这个动作监听器被添加到主面板中的登录按钮组件时,它们会从它们的位置转移到其他位置。唯一发生在第一次单击时,然后它们停留在它们所在的位置(而不是我想要它们的位置)。
其他因素: - 我使用绝对定位(对不起,如果你不喜欢它,但我更喜欢它) - 我使用的是 SynthLookAndFeel,但以前从未遇到过这种外观和感觉的问题。
谢谢