package jalview.gui; import java.awt.Container; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; /** * Boilerplate dialog class. Implements basic functionality necessary for model blocking/non-blocking dialogs * with an OK and Cancel button ready to add to the content pane. * @author jimp * */ public abstract class JalviewDialog extends JPanel { protected JDialog frame; protected JButton ok = new JButton(); protected JButton cancel = new JButton(); boolean block=false; public void waitForInput() { if (!block) { new Thread(new Runnable() { public void run() { frame.show(); } }).start(); } else { frame.show(); } } protected void initDialogFrame(Container content, boolean modal, boolean block, String title, int width, int height) { frame = new JDialog(Desktop.instance, true); frame.setTitle(title); if (Desktop.instance!=null) { Rectangle deskr = Desktop.instance.getBounds(); frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width/2), (int) (deskr.getCenterY() - height/2), width, height)); } else { frame.setSize(width,height); } frame.setContentPane(content); this.block = block; ok.setOpaque(false); ok.setText("OK"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okPressed(); closeDialog(); } }); cancel.setOpaque(false); cancel.setText("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cancelPressed(); closeDialog(); } }); } /** * clean up and raise the 'dialog closed' event by calling raiseClosed */ protected void closeDialog() { try { frame.dispose(); raiseClosed(); } catch (Exception ex) { } } protected abstract void raiseClosed(); protected abstract void okPressed(); protected abstract void cancelPressed(); }