gpt4 book ai didi

java - Jbutton 正在不同面板中移动组件

转载 作者:行者123 更新时间:2023-11-30 07:25:41 25 4
gpt4 key购买 nike

我已经搜索过这个问题,但没有找到任何接近的东西。我会尽量具体并发布代码,但这是一个大型程序,因此我无法发布所有代码。一般的问题是:一个面板上的 JButton 导致另一个面板上的组件在第一次单击时移动。只有在按钮上添加了 Action 监听器时才会发生这种情况。 (在没有 Action 监听器的情况下单击按钮会注意到(显然))。问题是我添加的 Action 监听器仅更改按钮背景、文本和大小(以适应新文本)。

这是目前的 Action 监听器。登录是 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());
}
}

设置是这样的。 Action 监听器是登录按钮所在的 loginPanel 的子类。该 loginPanel 被添加到框架上部 1/4 的主 JFrame 中。主 JFrame 的下部 3/4 是 mainPanel,它具有其他 swing 组件。 loginPanel 和 mainPanel 不共享组件或变量,或者真正知道彼此的存在(据我编码)。然而,当上面的这个 Action 监听器被添加到主面板中的登录按钮组件时,它们会从它们的位置移动到其他位置。只有在第一次点击时才会发生,然后它们会停留在它们所在的位置(而不是我想要的位置)。

其他因素:- 我使用绝对定位(对不起,如果你不喜欢它,但我更喜欢它)- 我正在使用 SynthLookAndFeel,但以前从未遇到过这种外观问题。

谢谢

最佳答案

Other factors: - I use absolute positioning (sorry if you don't like it but I like it better)

没有什么可遗憾的,解决方案很简单:不要使用绝对定位,而是了解并使用布局管理器以发挥其全部功能。使用它们的原因之一是避免像这样的有害错误。很有可能您的代码实际上正在使用组件的默认布局管理器,即使您现在还不知道。您可以找到更多关于它们的信息 here .很好地使用它们的关键之一是使用嵌套的 JPanel 嵌套它们,每个 JPanel 使用自己的布局管理器。然后他们可以自动为您完成繁重的布局提升。

关于java - Jbutton 正在不同面板中移动组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792092/

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