gpt4 book ai didi

java - 如何通过双击从子小部件创建 JOptionPane "OK"本身

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

我有一个使用 .showConfirmDialog 创建的 JOptionPane。其中有一个包含“东西”的 JPanel(它实际上是一个自定义项目浏览器,用于选择要打开的项目)。

一切正常 - 我选择一个要打开的项目,然后按“确定”,我可以从调用类中获取所选项目。这一切都很完美。

但是,我想要做的是能够双击一个项目并让它在面板上为我按下“确定”。双击方面不是问题。我不知道如何让它执行 OK 按。

我创建对话框:

OpenBookPanel info = new OpenBookPanel();
int r = JOptionPane.showConfirmDialog(this, info, "Open Book", JOptionPane.OK_CANCEL_OPTION);
if (r == JOptionPane.OK_OPTION) {
... etc ...

并且 OpenBookPanel 只是 JPanel 的扩展,包含一个 JScrollPane 和一个带有自己的单元格渲染器的 JTable和自定义模型(源可用here如果你想要的话)。

我想我可以沿着对象树向上走,从 OpenBookPanel 对象内到达周围的对话框,但是我会做什么呢?

最佳答案

在实验时,我偶然发现了答案(它没有记录在文档中......)

第一步是沿着树向上查找 JOptionPane 对象。这是在寻找双击的 MouseEvent Listener 中:

Component c = (Component)OpenBookPanel.this;
while ((c != null) && (!(c instanceof JOptionPane))) {
c = c.getParent();
}

如果c不是null那么您就找到了JOptionPane。这样您就可以正确地转换它。

现在是神奇的部分。 JOptionPane 有一个 setValue 方法:

public void setValue(Object newValue)

Sets the value the user has chosen.

Parameters:

newValue - the chosen value

See Also:

getValue()

使用JOptionPane.OK_OPTION调用它来设置您要选择的选项的值。现在 - 文档没有提到的是它不只是设置值:它主动选择值。它的作用就好像用户实际上与对话框交互来选择选项一样。当您使用该函数设置值时,对话框将关闭并返回所选值。

这是我完成的 MouseEvent Listener 供引用:

table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2 && table.getSelectedRow() != -1) {
Component c = (Component)OpenBookPanel.this;
while ((c != null) && (!(c instanceof JOptionPane))) {
c = c.getParent();
}
if (c == null) {
System.err.println("Could not get option pane!");
} else {
JOptionPane op = (JOptionPane)c;
op.setValue(JOptionPane.OK_OPTION);
}
}
}
});

关于java - 如何通过双击从子小部件创建 JOptionPane "OK"本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52552765/

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