package com.hackerdude.swing.picklist.font; import java.awt.BorderLayout; import java.awt.Font; import java.awt.Point; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import com.hackerdude.swing.SwingUtils; /** * A picklist dialog for fonts. */ public class FontPickListDialog extends JDialog { final Action ACTION_OK = new ActionOK(); final Action ACTION_CANCEL = new ActionCancel(); private BorderLayout blBorderLayout = new BorderLayout(); private JPanel pnlButtonsPanel = new JPanel(); private JButton btnCancel = new JButton(ACTION_CANCEL); private JButton btnOK = new JButton(ACTION_OK); FontPickListPanel pnlFontPickList = new FontPickListPanel(); private JPanel pnlInstructions = new JPanel(); private JLabel lblInstructions = new JLabel(); int modalResult = JOptionPane.CANCEL_OPTION; public FontPickListDialog(JFrame owner) { super(owner); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public FontPickListDialog() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout(blBorderLayout); btnCancel.setText("Cancel"); btnOK.setText("OK"); lblInstructions.setText("Please select a font from the list."); this.getContentPane().add(pnlButtonsPanel, BorderLayout.SOUTH); this.getContentPane().add(pnlFontPickList, BorderLayout.CENTER); this.getContentPane().add(pnlInstructions, BorderLayout.NORTH); pnlButtonsPanel.add(btnOK, null); pnlButtonsPanel.add(btnCancel, null); pnlInstructions.add(lblInstructions, null); } public void setValue(Font font) { pnlFontPickList.setCurrentFont(font); } public Font getValue() { return pnlFontPickList.getCurrentFont(); } public static void main(String[] args) { Font currentValue = new JLabel().getFont().deriveFont(48f); Font newValue = showFontSelectionDialog(null, "Select Font", "Please select a font, dude!", currentValue); if ( newValue == null ) System.out.println("No font selected"); else System.out.println(newValue.toString()); } public static Font showFontSelectionDialog(JFrame owner, String title, String instructions, Font currentFont) { FontPickListDialog dialog = new FontPickListDialog(owner); dialog.setTitle(title); dialog.setValue(currentFont); dialog.pack(); Point point = SwingUtils.getCenteredWindowPoint(dialog); dialog.setLocation(point); dialog.setModal(true); dialog.show(); if ( dialog.modalResult == JOptionPane.OK_OPTION ) { return dialog.getValue(); } else return null; } class ActionOK extends AbstractAction { public void actionPerformed(ActionEvent evt) { modalResult = JOptionPane.OK_OPTION; hide(); } } class ActionCancel extends AbstractAction { public void actionPerformed(ActionEvent evt) { modalResult = JOptionPane.CANCEL_OPTION; hide(); } } }