gpt4 book ai didi

java - 单选按钮不会立即更改状态

转载 作者:行者123 更新时间:2023-11-29 07:00:06 26 4
gpt4 key购买 nike

在我们的项目中,当在 Action 监听器中调用 SwingUtilites.invokeLater 时,我的队友注意到单选按钮的异常行为。 Action 监听器的架构不允许避免此调用,因为旨在启动另一个线程,然后切换回 AWT 线程。

有办法解决这个问题吗?我的意思是更改显示组件的状态。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;

public class RadioButtonTest {

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
}
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.add(panel);
ButtonGroup group = new ButtonGroup();
JRadioButton b1 = new JRadioButton("Button 1");
final JRadioButton b2 = new JRadioButton("Button 2");
b2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
Runnable action = new Runnable() {

@Override
public void run() {
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
}
}
};
SwingUtilities.invokeLater(action);
}
});
group.add(b1);
group.add(b2);
panel.add(b1);
panel.add(b2);

frame.setVisible(true);
}
}

最佳答案

您似乎想避免重复启动长时间运行的后台任务。代替 JRadioButton,使用父 JToggleButton,并在启动后台任务时将其名称和操作设置为 Cancel。一个 Future,例如 SwingWorker使这很方便。可以看到使用 JButton 的相关示例 here .

关于java - 单选按钮不会立即更改状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27556412/

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