package edu.harvard.wcfia.yoshikoder.ui.dialog; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import edu.harvard.wcfia.yoshikoder.util.ExportUtil; import edu.harvard.wcfia.yoshikoder.util.FileUtil; import edu.harvard.wcfia.yoshikoder.util.Messages; public class ExportDialog extends JDialog { protected String[] formats; protected JRadioButton[] buttons; protected JButton okButton, cancelButton; protected String chosenFormat; // null if cancelled public ExportDialog(Frame parent, String[] fileformats){ super(parent, Messages.getString("export"), true); init(parent, fileformats); } public ExportDialog(Dialog parent, String[] fileformats){ super(parent, Messages.getString("export"), true); init(parent, fileformats); } protected void init(Component parent, String[] fileformats){ formats = fileformats; JPanel panel = new JPanel(new GridLayout(fileformats.length, 1)); ButtonGroup group = new ButtonGroup(); buttons = new JRadioButton[fileformats.length]; for (int ii = 0; ii < fileformats.length; ii++) { JRadioButton button = new JRadioButton(fileformats[ii]); buttons[ii] = button; group.add(button); panel.add(button); } buttons[0].setSelected(true); panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); JPanel main = new JPanel(new BorderLayout()); main.add(panel, BorderLayout.CENTER); JLabel label = new JLabel("Choose an file format for the report"); label.setBorder(BorderFactory.createEmptyBorder(10,10,0, 10)); main.add(label, BorderLayout.NORTH); getContentPane().setLayout(new BorderLayout()); getContentPane().add(main, BorderLayout.CENTER); getContentPane().add(createButtonPanel(), BorderLayout.SOUTH); pack(); setLocationRelativeTo(parent); } protected JPanel createButtonPanel() { JPanel buttonPanel = new JPanel(new BorderLayout()); Box bbox = Box.createHorizontalBox(); cancelButton = new JButton(Messages.getString("cancel")); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { chosenFormat = null; hide(); } }); okButton = new JButton(Messages.getString("ok")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { int buttonOn = 0; for (int ii = 0; ii < buttons.length; ii++) { if (buttons[ii].isSelected()){ buttonOn = ii; break; } } chosenFormat = formats[buttonOn]; hide(); } }); // balance button widths int width = Math.max(okButton.getPreferredSize().width, cancelButton.getPreferredSize().width); okButton.setPreferredSize(new Dimension(width, okButton.getPreferredSize().height)); cancelButton.setPreferredSize(new Dimension(width, cancelButton.getPreferredSize().height)); if (FileUtil.isMac()){ bbox.add(Box.createHorizontalGlue()); bbox.add(cancelButton); bbox.add(Box.createHorizontalStrut(5)); bbox.add(okButton); bbox.add(Box.createHorizontalGlue()); bbox.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); } else { bbox.add(Box.createHorizontalGlue()); bbox.add(okButton); bbox.add(Box.createHorizontalStrut(5)); bbox.add(cancelButton); bbox.add(Box.createHorizontalGlue()); bbox.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); } buttonPanel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GRAY)); buttonPanel.add(bbox, BorderLayout.EAST); return buttonPanel; } public String getChosenFormat(){ return chosenFormat; } public static void main(String[] args) { JDialog d = new JDialog(); ExportDialog dia = new ExportDialog(d, new String[]{ExportUtil.HTML_FORMAT, ExportUtil.XML_FORMAT, ExportUtil.TXT_FORMAT}); dia.show(); System.out.println(dia.getChosenFormat()); } }