/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.core.utils.ui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import com.opendoorlogistics.api.ui.UIFactory.PromptOkCancelDialog; public class OkCancelDialog extends JDialog implements PromptOkCancelDialog{ public final static int OK_OPTION = JOptionPane.OK_OPTION; public final static int CANCEL_OPTION = JOptionPane.CANCEL_OPTION; protected final ButtonGroup buttonGroup = new ButtonGroup(); private int selectedOption = CANCEL_OPTION; /** * Launch the application. */ public static void main(String[] args) { try { OkCancelDialog dialog = new OkCancelDialog(); dialog.setVisible(true); } catch (Throwable e) { e.printStackTrace(); } } public OkCancelDialog() { this(null); } public OkCancelDialog(Window parent) { this(parent, true, true); } /** * Create the dialog. */ public OkCancelDialog(Window parent, boolean showOk, boolean showCancel) { this(parent, showOk, showCancel, true); } /** * Create the dialog. */ protected OkCancelDialog(Window parent, boolean showOk, boolean showCancel, boolean callAdd) { super(parent, JDialog.DEFAULT_MODALITY_TYPE); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); boolean inWindowsBuilder = parent == null; setBounds(100, 100, 243, 197); setLayout(new BorderLayout()); if(callAdd){ addAll(inWindowsBuilder, showOk, showCancel); } pack(); if (parent != null) { setLocationRelativeTo(parent); } } protected void addAll(boolean inWindowsBuilder, boolean showOk, boolean showCancel) { Component contentPanel = createMainComponent(inWindowsBuilder); add(contentPanel, BorderLayout.CENTER); addButtons(showOk, showCancel); } protected void addButtons(boolean showOk, boolean showCancel) { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); if (showOk) { JButton okButton = new JButton(getOkButtonText()); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onOk(); } }); okButton.setActionCommand("OK"); buttonPane.add(okButton); getRootPane().setDefaultButton(okButton); } if (showCancel) { JButton cancelButton = new JButton(getCancelButtonText()); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { selectedOption = CANCEL_OPTION; dispose(); } }); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); } } protected String getOkButtonText(){ return "OK"; } protected String getCancelButtonText(){ return "Cancel"; } protected void onOk() { selectedOption = OK_OPTION; dispose(); } protected Component createMainComponent(boolean inWindowsBuilder) { return new JPanel(); } public int getSelectedOption() { return selectedOption; } public int showModal() { selectedOption = CANCEL_OPTION; setVisible(true); return selectedOption; } @Override public boolean prompt() { return showModal() == OK_OPTION; } }