package swingExamples;
/**
* A class to show an example of a SpringLayout.
*
* @version 1.01 2004-05-06
* @author Cay Horstmann, modified by Bryan Higgs
*/
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.Spring;
import javax.swing.SpringLayout;
/**
* A frame that uses a spring layout to arrange font
* selection components.
*/
class FontDialogFrame extends JFrame
{
public FontDialogFrame()
{
setTitle("FontDialog");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JPanel panel = new JPanel();
SpringLayout layout = new SpringLayout();
panel.setLayout(layout);
ActionListener listener = new FontAction();
// construct components
JLabel faceLabel = new JLabel("Font Face: ");
face = new JComboBox(
new String[]
{
"Serif", "SansSerif", "Monospaced",
"Dialog", "DialogInput"
}
);
face.addActionListener(listener);
JLabel sizeLabel = new JLabel("Size: ");
size = new JComboBox(
new String[]
{
"8", "10", "12", "15", "18",
"24", "36", "48"
}
);
size.addActionListener(listener);
bold = new JCheckBox("Bold");
bold.addActionListener(listener);
italic = new JCheckBox("Italic");
italic.addActionListener(listener);
sample = new JTextArea();
sample.setText(
"The quick brown fox jumps over the lazy dog");
sample.setEditable(false);
sample.setLineWrap(true);
sample.setBorder(
BorderFactory.createEtchedBorder());
panel.add(faceLabel);
panel.add(sizeLabel);
panel.add(face);
panel.add(size);
panel.add(bold);
panel.add(italic);
panel.add(sample);
// add springs to lay out components
Spring strut = Spring.constant(10);
Spring labelsEast = Spring.sum(strut,
Spring.max(
layout.getConstraints(faceLabel).getWidth(),
layout.getConstraints(sizeLabel).getWidth()));
layout.putConstraint(
SpringLayout.EAST,
faceLabel, labelsEast, SpringLayout.WEST, panel);
layout.putConstraint(
SpringLayout.EAST,
sizeLabel, labelsEast, SpringLayout.WEST, panel);
layout.putConstraint(
SpringLayout.NORTH,
faceLabel, strut, SpringLayout.NORTH, panel);
layout.putConstraint(
SpringLayout.NORTH,
face, strut, SpringLayout.NORTH, panel);
Spring secondRowNorth =
Spring.sum(strut,
Spring.max(
layout.getConstraint(
SpringLayout.SOUTH, faceLabel),
layout.getConstraint(
SpringLayout.SOUTH, face)
)
);
layout.putConstraint(
SpringLayout.NORTH,
sizeLabel, secondRowNorth, SpringLayout.NORTH, panel);
layout.putConstraint(
SpringLayout.NORTH,
size, secondRowNorth, SpringLayout.NORTH, panel);
layout.putConstraint(
SpringLayout.WEST,
face, strut, SpringLayout.EAST, faceLabel);
layout.putConstraint(
SpringLayout.WEST,
size, strut, SpringLayout.EAST, sizeLabel);
layout.putConstraint(
SpringLayout.WEST,
bold, strut, SpringLayout.WEST, panel);
layout.putConstraint(
SpringLayout.WEST,
italic, strut, SpringLayout.WEST, panel);
Spring s = Spring.constant(10, 10000, 10000);
Spring thirdRowNorth =
Spring.sum(s,
Spring.max(
layout.getConstraint(
SpringLayout.SOUTH, sizeLabel),
layout.getConstraint(
SpringLayout.SOUTH, size)
)
);
layout.putConstraint(
SpringLayout.NORTH,
bold, thirdRowNorth, SpringLayout.NORTH, panel);
layout.putConstraint(
SpringLayout.NORTH,
italic, s, SpringLayout.SOUTH, bold);
layout.putConstraint(
SpringLayout.SOUTH,
panel, s, SpringLayout.SOUTH, italic);
Spring secondColumnWest =
Spring.sum(strut,
Spring.max(
layout.getConstraint(
SpringLayout.EAST, face),
layout.getConstraint(
SpringLayout.EAST, size)
)
);
layout.putConstraint(
SpringLayout.WEST,
sample, secondColumnWest, SpringLayout.WEST, panel);
layout.putConstraint(
SpringLayout.SOUTH,
sample, Spring.minus(strut), SpringLayout.SOUTH, panel);
layout.putConstraint(
SpringLayout.NORTH,
sample, strut, SpringLayout.NORTH, panel);
layout.putConstraint(
SpringLayout.EAST,
panel, strut, SpringLayout.EAST, sample);
add(panel);
}
///// Private data ////
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 200;
private JComboBox face;
private JComboBox size;
private JCheckBox bold;
private JCheckBox italic;
private JTextArea sample;
/**
* An action listener that changes the font of the
* sample text.
*/
private class FontAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String fontFace = (String) face.getSelectedItem();
int fontStyle = (bold.isSelected() ? Font.BOLD : 0)
+ (italic.isSelected() ? Font.ITALIC : 0);
int fontSize = Integer.parseInt(
(String) size.getSelectedItem());
Font font = new Font(fontFace, fontStyle, fontSize);
sample.setFont(font);
sample.repaint();
}
}
}
public class SpringLayoutExample
{
public static void main(String[] args)
{
FontDialogFrame frame = new FontDialogFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
|