In meiner Anwendung muss JOptionPane.showOptionDialog häufig angezeigt werden, wenn Benutzer Eingabe bereitstellen.JOptionPane.showOptionDialog mit benutzerdefinierten Panel funktioniert nicht richtig
Manchmal wird es nicht angezeigt und es wartet auf Benutzereingaben und hängt.
Hier habe ich den Beispielcode hinzugefügt, um das gleiche zu reproduzieren.
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]);
}
}
}
Die o/p angezeigt wie
"Test Frage Nachricht index = 0" und klicken Sie auf OK
"Test Frage Nachricht Index = 1" und klicken Sie auf OK
Auf einem zufälligen Der JOptionPane.showOptionDialog wird nicht angezeigt.
Bitte jeder kann mir helfen !!! Danke im Voraus.
Siehe [* Anfängliche Themen *] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod