の拡張機能を作成しましたJDialog
。
public class ImageDialog extends JDialog implements ActionListener {
private JTextField textField;
public ImageDialog(JFrame parent, String title,
String message, BufferedImage bufferedImage) {
super(parent, title, true);
if (parent != null) {
Dimension parentSize = parent.getSize();
Point p = parent.getLocation();
setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);
}
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setModal(true);
JPanel frame = new JPanel();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel(message), BorderLayout.PAGE_START);
JLabel lblimage = new JLabel(new ImageIcon(bufferedImage));
frame.add(lblimage, BorderLayout.CENTER);
textField = new JTextField(1);
frame.add(textField, BorderLayout.PAGE_END);
getContentPane().add(frame);
JPanel buttonPane = new JPanel();
JButton button = new JButton("OK");
buttonPane.add(button);
button.addActionListener(this);
getContentPane().add(buttonPane, BorderLayout.SOUTH);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
pack();
setVisible(true);
}
public String getTextField() {
return textField.getText();
}
public void actionPerformed(ActionEvent e) {
setVisible(false);
dispose();
}
}
それはうまく機能し、使用された後にjvmが閉じないことを除いて、本来の機能を果たします。次のように使用します。
ImageDialog dlg = new ImageDialog(new JFrame(), "Important question", "How many fluffy bunnies do you see?", img);
System.out.println(dlg.getTextField());
dlg.dispose();
しかし、プログラムが完了すると、JVM はそこでハングアップします。これを修正する方法はありますか?