gpt4 book ai didi

java - 使用自定义面板的 JOptionPane.showOptionDialog 无法正常工作

转载 作者:行者123 更新时间:2023-12-02 03:33:03 27 4
gpt4 key购买 nike

在我的应用程序中,当用户提供输入时需要频繁显示 JOptionPane.showOptionDialog。

有时它不会显示,而是等待用户输入并挂起。

这里我附上了示例代码以重现相同的内容。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.ToolTipManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;

public class TestJOptionPane {

public static void main(String[] args) {

for (int index = 0; index < 20; index++) {
String serverMessage = "Test question message index = "+index;
String hintText = "Test question hint index = "+index;

JPanel mainPanel = new JPanel(new BorderLayout(0,4));
JPanel answerPanel = new JPanel(new GridBagLayout());

StyleContext context = new StyleContext();
StyledDocument document = new DefaultStyledDocument(context);

Style style = context.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setFontFamily(style, "Dialog");
StyleConstants.setFontSize(style, 12);
StyleConstants.setBold(style, true);

try {
document.insertString(document.getLength(), serverMessage, style);
} catch (BadLocationException badLocationException) {
System.out.println(badLocationException.getMessage());
}

JTextPane questionTA = new JTextPane(document);
questionTA.setEditable(false);
questionTA.setOpaque(false);

final JTextField answerField = new JTextField();
answerField.setPreferredSize( new Dimension(410,23) );
answerField.requestFocus();

JLabel hint = new JLabel();

ToolTipManager.sharedInstance().setDismissDelay(10000);
hint.setText("Hint");
// hint.setIcon(Utility.getIcon("HintQuestion.png"));

answerPanel.add(answerField);
answerPanel.add(new JPanel().add(hint));
answerPanel.setPreferredSize(new Dimension(450, 30));
mainPanel.add(questionTA,BorderLayout.NORTH);
mainPanel.add(answerPanel,BorderLayout.SOUTH);

hint.setToolTipText(hintText);

String[] options = {"OK"};
JOptionPane.showOptionDialog(null, mainPanel, "Test showOptionDialog", JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
}
}
}

o/p 显示如下

“测试问题消息索引 = 0”并单击“确定”

“测试问题消息索引 = 1”并单击“确定”

随机地,JOptionPane.showOptionDialog 不显示。

请任何人都可以帮助我!提前致谢。

最佳答案

您需要更改代码如下。

        try {
SwingUtilities.invokeAndWait(new Runnable() {

@Override
public void run() {
int result = JOptionPane.showOptionDialog(null, mainPanel, "Test showOptionDialog", JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
}
});
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

关于java - 使用自定义面板的 JOptionPane.showOptionDialog 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37804322/

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