All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.l2fprod.common.swing.BaseDialog Maven / Gradle / Ivy

Go to download

Orbit, a versatile image analysis software for biological image-based quantification

There is a newer version: 3.15
Show newest version
/**
 * $ $ License.
 *
 * Copyright $ L2FProd.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.l2fprod.common.swing;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

import com.l2fprod.common.util.ResourceManager;

/**
 * An extension of the JDialog with built-in support for
 * OK/CANCEL/CLOSE buttons.
 * 
 * BaseDialog adds:
 * 
    *
  • support for ESCAPE key to dispose the window
  • *
  • ok, cancel methods
  • *
  • simple method to check if ok or cancel was called ({@link #ask}) *
  • *
  • button pane
  • *
  • banner pane
  • *
*/ public class BaseDialog extends JDialog { /** * Used to set the mode of the dialog to OK/CANCEL. When in this mode, OK and * Cancel buttons are automatically added to the dialog. */ public final static int OK_CANCEL_DIALOG = 0; /** * Used to set the mode of the dialog to OK/CANCEL. When in this mode, a * Close button is automatically added to the dialog. */ public final static int CLOSE_DIALOG = 1; private BannerPanel banner; private JPanel contentPane; private JPanel buttonPane; private boolean cancelClicked; private JButton okButton; private JButton cancelOrCloseButton; private int mode; private Action okAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { ok(); } }; private Action cancelOrCloseAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { cancel(); } }; public BaseDialog() throws HeadlessException { super(); buildUI(); } public BaseDialog(Dialog owner) throws HeadlessException { super(owner); buildUI(); } public BaseDialog(Dialog owner, boolean modal) throws HeadlessException { super(owner, modal); buildUI(); } public BaseDialog(Frame owner) throws HeadlessException { super(owner); buildUI(); } public BaseDialog(Frame owner, boolean modal) throws HeadlessException { super(owner, modal); buildUI(); } public BaseDialog(Dialog owner, String title) throws HeadlessException { super(owner, title); buildUI(); } public BaseDialog(Dialog owner, String title, boolean modal) throws HeadlessException { super(owner, title, modal); buildUI(); } public BaseDialog(Frame owner, String title) throws HeadlessException { super(owner, title); buildUI(); } public BaseDialog(Frame owner, String title, boolean modal) throws HeadlessException { super(owner, title, modal); buildUI(); } public BaseDialog( Dialog owner, String title, boolean modal, GraphicsConfiguration gc) throws HeadlessException { super(owner, title, modal, gc); buildUI(); } public BaseDialog( Frame owner, String title, boolean modal, GraphicsConfiguration gc) { super(owner, title, modal, gc); buildUI(); } /** * Gets the BannerPanel displayed in this dialog. The BannerPanel can be made * invisible by calling getBanner().setVisible(false); if it * is not needed. * * @return * @see BannerPanel */ public final BannerPanel getBanner() { return banner; } public final Container getContentPane() { return contentPane; } public final Container getButtonPane() { return buttonPane; } /** * @return true if OK was clicked, false if CANCEL or CLOSE was clicked */ public boolean ask() { setVisible(true); dispose(); return !cancelClicked; } /** * Called when the user clicks on the OK button. */ public void ok() { cancelClicked = false; setVisible(false); } /** * Called when the user clicks on the CANCEL or CLOSE button */ public void cancel() { cancelClicked = true; setVisible(false); } /** * Sets the mode of this dialog. Default mode is * {@link BaseDialog#OK_CANCEL_DIALOG} * * @param mode {@link BaseDialog#OK_CANCEL_DIALOG}or * {@link BaseDialog#CLOSE_DIALOG} */ public void setDialogMode(int mode) { if (!(mode == OK_CANCEL_DIALOG || mode == CLOSE_DIALOG)) { throw new IllegalArgumentException("invalid dialog mode"); } if (okButton != null) { buttonPane.remove(okButton); okButton = null; } if (cancelOrCloseButton != null) { buttonPane.remove(cancelOrCloseButton); cancelOrCloseButton = null; } switch (mode) { case OK_CANCEL_DIALOG : okButton = new JButton(ResourceManager.all(BaseDialog.class).getString("ok")); okButton.addActionListener(okAction); buttonPane.add(okButton); cancelOrCloseButton = new JButton( ResourceManager.all(BaseDialog.class).getString("cancel")); cancelOrCloseButton.addActionListener(cancelOrCloseAction); buttonPane.add(cancelOrCloseButton); break; case CLOSE_DIALOG : cancelOrCloseButton = new JButton(ResourceManager.all(BaseDialog.class).getString("close")); cancelOrCloseButton.addActionListener(cancelOrCloseAction); buttonPane.add(cancelOrCloseButton); break; } this.mode = mode; } /** * Gets this dialog mode * * @return this dialog mode */ public int getDialogMode() { return mode; } /** * Centers this dialog on screen. */ public void centerOnScreen() { UIUtilities.centerOnScreen(this); } protected String paramString() { return super.paramString() + ",dialogMode=" + (mode == OK_CANCEL_DIALOG ? "OK_CANCEL_DIALOG" : "CLOSE_DIALOG"); } private void buildUI() { Container container = super.getContentPane(); container.setLayout(new BorderLayout(0, 0)); banner = new BannerPanel(); container.add("North", banner); JPanel contentPaneAndButtons = new JPanel(); contentPaneAndButtons.setLayout( LookAndFeelTweaks.createVerticalPercentLayout()); contentPaneAndButtons.setBorder(LookAndFeelTweaks.WINDOW_BORDER); container.add("Center", contentPaneAndButtons); contentPane = new JPanel(); LookAndFeelTweaks.setBorderLayout(contentPane); LookAndFeelTweaks.setBorder(contentPane); contentPaneAndButtons.add(contentPane, "*"); buttonPane = new JPanel(); buttonPane.setLayout(LookAndFeelTweaks.createButtonAreaLayout()); LookAndFeelTweaks.setBorder(buttonPane); contentPaneAndButtons.add(buttonPane); // layout is done, now everything about "cancel", "escape key" and "click // on close in window bar" setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); ((JComponent)container).registerKeyboardAction( cancelOrCloseAction, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel(); } }); // default mode is OK_CANCEL_DIALOG setDialogMode(OK_CANCEL_DIALOG); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy