package test.check;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerListModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.BusinessBlackSteelSkin;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
public class HAlignmentPanel extends ControllablePanel implements Deferrable {
private boolean isInitialized;
private JCheckBox toPaintGuiderLines;
private JCheckBox toPaintBounds;
@Override
public boolean isInitialized() {
return this.isInitialized;
}
public HAlignmentPanel() {
this.setLayout(new BorderLayout());
}
@Override
public synchronized void initialize() {
FormLayout lm = new FormLayout("left:pref:grow", "");
DefaultFormBuilder builder = new DefaultFormBuilder(lm,
new ScrollablePanel());
builder.setDefaultDialogBorder();
for (int fontSize = 11; fontSize < 25; fontSize++) {
builder.append(getSubPanel(fontSize));
}
this.add(new JScrollPane(builder.getPanel()));
FormLayout controlPanelLayoutManager = new FormLayout("fill:pref:grow",
"");
DefaultFormBuilder controlPanelBuilder = new DefaultFormBuilder(
controlPanelLayoutManager, new ScrollablePanel());
toPaintGuiderLines = new JCheckBox("guider lines");
toPaintGuiderLines.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}
});
controlPanelBuilder.append(toPaintGuiderLines);
toPaintBounds = new JCheckBox("bounds");
toPaintBounds.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}
});
controlPanelBuilder.append(toPaintBounds);
this.controlPanel = controlPanelBuilder.getPanel();
this.isInitialized = true;
}
private JPanel getSubPanel(int size) {
final JButton button = new JButton("sample");
final JTextField tf = new JTextField("sample");
final JPanel result = new JPanel(new FlowLayout(FlowLayout.LEFT)) {
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g.create();
if (toPaintGuiderLines.isSelected()) {
Rectangle buttonBounds = button.getBounds();
int textFieldBaseline = tf.getBaseline(buttonBounds.width,
buttonBounds.height);
g2d.setColor(new Color(255, 0, 0, 196));
g2d.drawLine(0, buttonBounds.y, getWidth(), buttonBounds.y);
g2d.drawLine(0, buttonBounds.y + buttonBounds.height - 1,
getWidth(), buttonBounds.y + buttonBounds.height
- 1);
g2d.setColor(new Color(0, 128, 0, 196));
g2d.drawLine(0, buttonBounds.y + textFieldBaseline,
getWidth(), buttonBounds.y + textFieldBaseline);
}
if (toPaintBounds.isSelected()) {
for (int i = 0; i < getComponentCount(); i++) {
Component child = getComponent(i);
Rectangle bounds = child.getBounds();
g2d.setColor(new Color(128, 0, 255, 128));
g2d.fill(bounds);
// g2d.setFont(child.getFont());
// String size = bounds.getWidth() + "*"
// + bounds.getHeight();
// int sizeWidth =
// g2d.getFontMetrics().stringWidth(size);
// int sizeHeight = g2d.getFontMetrics().getHeight();
// g2d.setColor(new Color(64, 0, 128));
// Rectangle buttonBounds = button.getBounds();
// int textFieldBaseline = tf.getBaseline(
// buttonBounds.width, buttonBounds.height);
// g2d.drawString(size, bounds.x
// + (bounds.width - sizeWidth) / 2, bounds.y
// + textFieldBaseline);
}
}
g2d.dispose();
}
};
String fontName = "Tahoma";
Font font = new Font(fontName, Font.PLAIN, size);
if (UIManager.getLookAndFeel() instanceof SubstanceLookAndFeel) {
Font base = SubstanceLookAndFeel.getFontPolicy().getFontSet(
"Substance", null).getControlFont();
fontName = base.getFamily();
font = base.deriveFont((float) size);
}
JLabel label = new JLabel(fontName + " " + size);
label.setFont(font);
result.add(label);
tf.setFont(font);
result.add(tf);
JPasswordField pf = new JPasswordField("sample");
pf.setFont(font);
result.add(pf);
JComboBox ecb = new JComboBox(new Object[] { "sample" }) {
@Override
public void updateUI() {
super.updateUI();
((JTextField) getEditor().getEditorComponent()).setColumns(5);
}
};
ecb.setFont(font);
ecb.setEditable(true);
// the next line is to make the combobox not too wide
ecb.setPrototypeDisplayValue("sample");
result.add(ecb);
JSpinner s = new JSpinner(new SpinnerListModel(new Object[] {
"sample0", "sample", "sample2" }));
s.getModel().setValue("sample");
s.setFont(font);
result.add(s);
JComboBox cb = new JComboBox(new Object[] { "sample" });
cb.setFont(font);
result.add(cb);
button.setFont(font);
result.add(button);
JRadioButton radio = new JRadioButton("sample");
radio.setFont(font);
result.add(radio);
JCheckBox check = new JCheckBox("sample");
check.setFont(font);
result.add(check);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
result.revalidate();
}
});
return result;
}
public static void main(String[] args) throws Exception {
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SubstanceLookAndFeel.setSkin(new BusinessBlackSteelSkin());
JFrame frame = new JFrame("Alignment");
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HAlignmentPanel panel = new HAlignmentPanel();
panel.initialize();
frame.add(panel, BorderLayout.CENTER);
frame.setVisible(true);
}
});
}
}