package jeql.util; import java.awt.Component; import java.awt.Dimension; import java.awt.Insets; import java.awt.Toolkit; import java.io.File; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JToggleButton; import javax.swing.filechooser.FileFilter; public class SwingUtil { /** * Centers the component on the screen */ public static void centerOnScreen(Component comp) { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); comp.setLocation( (screenSize.width - comp.getWidth()) / 2, (screenSize.height - comp.getHeight()) / 2); } public static JButton createIconButton(ImageIcon icon, int dimension, String tooltipText, java.awt.event.ActionListener action) { JButton btn = new JButton(); btn.setToolTipText(tooltipText); btn.setIcon(icon); btn.setMaximumSize(new Dimension(dimension, dimension)); btn.setMinimumSize(new Dimension(dimension, dimension)); btn.setPreferredSize(new Dimension(dimension, dimension)); btn.setMargin(new Insets(0, 0, 0, 0)); if (action != null) btn.addActionListener(action); return btn; } public static JToggleButton createToggleButton(ImageIcon icon, int dimension, String tooltipText, java.awt.event.ActionListener action) { JToggleButton btn = createToggleButton(icon, dimension, tooltipText); if (action != null) btn.addActionListener(action); return btn; } public static JToggleButton createToggleButton(ImageIcon icon, int dimension, String tooltipText, java.awt.event.ItemListener action) { JToggleButton btn = createToggleButton(icon, dimension, tooltipText); if (action != null) btn.addItemListener(action); return btn; } public static JToggleButton createToggleButton(ImageIcon icon, int dimension, String tooltipText) { JToggleButton btn = new JToggleButton(); btn.setToolTipText(tooltipText); btn.setIcon(icon); btn.setMaximumSize(new Dimension(dimension, dimension)); btn.setMinimumSize(new Dimension(dimension, dimension)); btn.setPreferredSize(new Dimension(dimension, dimension)); btn.setMargin(new Insets(0, 0, 0, 0)); return btn; } public static ImageIcon createIcon(Object context, String file) { return new ImageIcon(context.getClass().getResource(file)); } public static FileFilter PNG_FILE_FILTER = createFileFilter("PNG File (*.png)", ".png"); /** * * Example usage: * <pre> * SwingUtil.createFileFilter("JEQL script (*.jql)", "jql") * </pre> * @param description * @param extension * @return */ public static FileFilter createFileFilter(final String description, String extension) { final String dotExt = extension.startsWith(".") ? extension : "." + extension; FileFilter ff = new FileFilter() { public String getDescription() { return description; } public boolean accept(File f) { return f.isDirectory() || f.toString().toLowerCase().endsWith(dotExt); } }; return ff; } public static String chooseFilenameWithConfirm(Component comp, JFileChooser fileChooser) { try { if (JFileChooser.APPROVE_OPTION == fileChooser.showSaveDialog(comp)) { File file = fileChooser.getSelectedFile(); if (! SwingUtil.confirmOverwrite(comp, file)) return null; String fullFileName = fileChooser.getSelectedFile().toString(); return fullFileName; } } catch (Exception x) { SwingUtil.reportException(comp, x); } return null; } public static boolean confirmOverwrite(Component comp, File file) { if (file.exists()) { return confirmAction(comp, "Confirmation", file.getName() + " exists. Overwrite?"); } return true; } public static boolean confirmAction(Component comp, String title, String msg) { int decision = JOptionPane.showConfirmDialog(comp, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (decision == JOptionPane.NO_OPTION) { return false; } return true; } public static void reportException(Component c, Exception e) { JOptionPane.showMessageDialog(c, StringUtil.wrap(e.toString(), 80), "Exception", JOptionPane.ERROR_MESSAGE); e.printStackTrace(System.out); } }