blob: 5b413ae3a81c12c4c88598611eb021b51b397d65 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.airavata.common.utils;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.net.URL;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.Spring;
import javax.swing.SpringLayout;
public class SwingUtil {
/**
* Minimum size, zero.
*/
public static final Dimension MINIMUM_SIZE = new Dimension(0, 0);
/**
* The default distance between components.
*/
public static final int PAD = 6;
/**
* Default cursor.
*/
public static final Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR);
/**
* Hand cursor.
*/
public static final Cursor HAND_CURSOR = new Cursor(Cursor.HAND_CURSOR);
/**
* Cross hair cursor.
*/
public static final Cursor CROSSHAIR_CURSOR = new Cursor(Cursor.CROSSHAIR_CURSOR);
/**
* Move cursor.
*/
public static final Cursor MOVE_CURSOR = new Cursor(Cursor.MOVE_CURSOR);
/**
* Wait cursor.
*/
public static final Cursor WAIT_CURSOR = new Cursor(Cursor.WAIT_CURSOR);
/**
* Creates an icon from an image contained in the "images" directory.
*
* @param filename
* @return the ImageIcon created
*/
public static ImageIcon createImageIcon(String filename) {
ImageIcon icon = null;
URL imgURL = getImageURL(filename);
if (imgURL != null) {
icon = new ImageIcon(imgURL);
}
return icon;
}
/**
* Creates an image from an image contained in the "images" directory.
*
* @param filename
* @return the Image created
*/
public static Image createImage(String filename) {
Image icon = null;
URL imgURL = getImageURL(filename);
if (imgURL != null) {
icon = Toolkit.getDefaultToolkit().getImage(imgURL);
}
return icon;
}
public static URL getImageURL(String filename) {
String path = "/images/" + filename;
URL imgURL = SwingUtil.class.getResource(path);
return imgURL;
}
/**
* Return the Frame of a specified component if any.
*
* @param component
* the specified component
*
* @return the Frame of a specified component if any; otherwise null
*/
public static Frame getFrame(Component component) {
Frame frame;
Component parent;
while ((parent = component.getParent()) != null) {
component = parent;
}
if (component instanceof Frame) {
frame = (Frame) component;
} else {
frame = null;
}
return frame;
}
/**
* Wight none of rows or eolumns. Used by layoutToGrid().
*/
public final static int WEIGHT_NONE = -1;
/**
* Weight all rows or columns equally. Used by layoutToGrid().
*/
public final static int WEIGHT_EQUALLY = -2;
/**
* Layouts the child components of a specified parent component using GridBagLayout.
*
* @param parent
* The specified parent component
* @param numRow
* The number of rows
* @param numColumn
* The number of columns
* @param weightedRow
* The row to weight
* @param weightedColumn
* The column to weight
*/
public static void layoutToGrid(Container parent, int numRow, int numColumn, int weightedRow, int weightedColumn) {
GridBagLayout layout = new GridBagLayout();
parent.setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
for (int row = 0; row < numRow; row++) {
constraints.gridy = row;
if (weightedRow == WEIGHT_EQUALLY) {
constraints.weighty = 1;
} else if (row == weightedRow) {
constraints.weighty = 1;
} else {
constraints.weighty = 0;
}
for (int column = 0; column < numColumn; column++) {
constraints.gridx = column;
if (weightedColumn == WEIGHT_EQUALLY) {
constraints.weightx = 1;
} else if (column == weightedColumn) {
constraints.weightx = 1;
} else {
constraints.weightx = 0;
}
Component component = parent.getComponent(row * numColumn + column);
layout.setConstraints(component, constraints);
}
}
}
/**
* @param parent
* @param rowWeights
* @param columnWeights
*/
public static void layoutToGrid(Container parent, double[] rowWeights, double[] columnWeights) {
GridBagLayout layout = new GridBagLayout();
parent.setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
for (int row = 0; row < rowWeights.length; row++) {
constraints.gridy = row;
constraints.weighty = rowWeights[row];
for (int column = 0; column < columnWeights.length; column++) {
constraints.gridx = column;
constraints.weightx = columnWeights[column];
Component component = parent.getComponent(row * columnWeights.length + column);
layout.setConstraints(component, constraints);
}
}
}
/**
* @param parent
* @param rowWeights
* @param columnWeights
*/
@SuppressWarnings("boxing")
public static void layoutToGrid(Container parent, List<Double> rowWeights, List<Double> columnWeights) {
GridBagLayout layout = new GridBagLayout();
parent.setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
for (int row = 0; row < rowWeights.size(); row++) {
constraints.gridy = row;
constraints.weighty = rowWeights.get(row);
for (int column = 0; column < columnWeights.size(); column++) {
constraints.gridx = column;
constraints.weightx = columnWeights.get(column);
Component component = parent.getComponent(row * columnWeights.size() + column);
layout.setConstraints(component, constraints);
}
}
}
/**
* Aligns the first <code>rows</code> * <code>cols</code> components of <code>parent</code> in a grid. Each
* component in a column is as wide as the maximum preferred width of the components in that column; height is
* similarly determined for each row. The parent is made just big enough to fit them all.
*
* @param parent
*
* @param rows
* number of rows
* @param cols
* number of columns
*/
public static void makeSpringCompactGrid(Container parent, int rows, int cols) {
makeSpringCompactGrid(parent, rows, cols, PAD, PAD, PAD, PAD);
}
/**
* Aligns the first <code>rows</code> * <code>cols</code> components of <code>parent</code> in a grid. Each
* component in a column is as wide as the maximum preferred width of the components in that column; height is
* similarly determined for each row. The parent is made just big enough to fit them all.
*
* @param parent
*
* @param rows
* number of rows
* @param cols
* number of columns
* @param initialX
* x location to start the grid at
* @param initialY
* y location to start the grid at
* @param xPad
* x padding between cells
* @param yPad
* y padding between cells
*/
private static void makeSpringCompactGrid(Container parent, int rows, int cols, int initialX, int initialY,
int xPad, int yPad) {
SpringLayout layout = new SpringLayout();
parent.setLayout(layout);
// Align all cells in each column and make them the same width.
Spring x = Spring.constant(initialX);
for (int c = 0; c < cols; c++) {
Spring width = Spring.constant(0);
for (int r = 0; r < rows; r++) {
width = Spring.max(width, getConstraintsForCell(r, c, parent, cols).getWidth());
}
for (int r = 0; r < rows; r++) {
SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
constraints.setX(x);
constraints.setWidth(width);
}
x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
}
// Align all cells in each row and make them the same height.
Spring y = Spring.constant(initialY);
for (int r = 0; r < rows; r++) {
Spring height = Spring.constant(0);
for (int c = 0; c < cols; c++) {
height = Spring.max(height, getConstraintsForCell(r, c, parent, cols).getHeight());
}
for (int c = 0; c < cols; c++) {
SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
constraints.setY(y);
constraints.setHeight(height);
}
y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
}
// Set the parent's size.
SpringLayout.Constraints pCons = layout.getConstraints(parent);
pCons.setConstraint(SpringLayout.SOUTH, y);
pCons.setConstraint(SpringLayout.EAST, x);
}
/* Used by makeCompactGrid. */
private static SpringLayout.Constraints getConstraintsForCell(int row, int col, Container parent, int cols) {
SpringLayout layout = (SpringLayout) parent.getLayout();
Component c = parent.getComponent(row * cols + col);
return layout.getConstraints(c);
}
public static void addPlaceHolder(final JTextField field,final String placeHolderText){
field.addFocusListener(new FocusListener(){
private Color fontColor=field.getForeground();
// private String previousText=field.getText();
public void focusGained(FocusEvent arg0) {
if (field.getText().equals(placeHolderText)){
field.setText("");
}
field.setForeground(fontColor);
}
public void focusLost(FocusEvent arg0) {
if (field.getText().trim().equals("")){
fontColor=field.getForeground();
field.setForeground(Color.GRAY);
field.setText(placeHolderText);
}
}
});
if (field.getText().trim().equals("")){
field.setText(placeHolderText);
field.setForeground(Color.GRAY);
}
}
}