gpt4 book ai didi

java - JTable header 中 JButton 上的 ActionListener 卡住应用程序

转载 作者:行者123 更新时间:2023-12-01 15:35:11 25 4
gpt4 key购买 nike

我有一个 JTable,它使用 JButton 作为列上的标题之一。

如果没有 ActionListener,按钮似乎可以正常工作,我可以看到它在视觉上单击。但是,当我添加应该弹出 JOptionPane 的 ActionListener 时,应用程序会停止重新绘制自身,停止响应任何操作,并且不会绘制选项 Pane 。

public class ButtonHeaderRenderer extends JButton implements TableCellRenderer, ActionListener
{
int pushedColumn;

public ButtonHeaderRenderer(Icon image, JTableHeader header, ActionListener actionListener)
{
pushedColumn = -1;
setIcon(image);
setForeground(header.getForeground());
setBackground(header.getBackground());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
setMargin(new Insets(0, 0, 0, 0));
addActionListener(this);
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
setText((value == null) ? "" : value.toString());
boolean isPressed = (column == pushedColumn);
getModel().setPressed(isPressed);
getModel().setArmed(isPressed);
return this;
}

public void setPressedColumn(int col)
{
this.pushedColumn = col;
}

public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
}
}

有人知道是什么原因导致这个问题吗?

编辑:看来在actionPerformed方法中创建一个新线程并在其中创建JOptionPane是可行的。这看起来像是一个 hack,但是,我在其他地方使用过 JOptionPane,并且无需启动新线程即可正常工作。

最佳答案

尝试在 SwingUtilities.invokeLater() 中调用 JOptionPane

关于java - JTable header 中 JButton 上的 ActionListener 卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977077/

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