//**********************************************************************
// Package
//**********************************************************************
package doc.example;
//**********************************************************************
// Import list
//**********************************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import org.freixas.tablelayout.*;
/**
* This class allows a user to dynamically alter a set of components
* using the TableLayout class to explore the layout's abilities.
*
* @author Antonio Freixas
*/
public class TableExplorer
extends JFrame
implements CaretListener, ActionListener, ListSelectionListener,
FocusListener, MenuListener
{
//**********************************************************************
// Constants
//**********************************************************************
static final String[] tablePositionList = {
"Default",
"tn", "tne", "tnw",
"ts", "tse", "tsw",
"te", "tw", "tc"
};
static final String[] tableFillList = {
"Default", "tfh", "tfv", "tf"
};
static final String[] positionList = {
"Default",
"n", "ne", "nw",
"s", "se", "sw",
"e", "w", "c"
};
static final String[] fillList = {
"Default", "fh", "fv", "f"
};
//**********************************************************************
// Fields
//**********************************************************************
JFrame layout;
JPanel layoutPane;
JFrame code;
JPanel codePane;
HashMap compHash = new HashMap();
HashMap attrHash = new HashMap();
JMenu fileMenu;
JMenu windowMenu;
JMenu helpMenu;
JMenuItem exitItem;
JMenuItem previewItem;
JMenuItem packItem;
JMenuItem codeItem;
JMenuItem generateItem;
JMenuItem aboutItem;
JButton upButton;
JButton downButton;
JButton removeButton;
JButton addButton;
JList compList;
DefaultListModel compListModel;
JTextField compEntryField;
JTextField columnsField;
JTextField[] tableInsetFields = new JTextField[4];
JTextField rowGapField;
JTextField colGapField;
JComboBox tablePositionBox;
JComboBox tableFillBox;
JTextField[] tableCellInsetFields = new JTextField[4];
JComboBox tableCellPositionBox;
JComboBox tableCellFillBox;
JTextField tableRowWeightField;
JTextField tableColWeightField;
JTextField tableAttributesField;
JTextField[] insetFields = new JTextField[4];
JComboBox positionBox;
JComboBox fillBox;
JTextField rowWeightField;
JTextField colWeightField;
JTextField colPositionField;
JTextField skipCellsField;
JTextField rowSpanField;
JTextField colSpanField;
JTextField cellAttributesField;
JTextArea codeTextArea;
JScrollPane codeTextScroll;
String textWhenFocusGained = null;
boolean ignoreEvents = false;
TableAttributes tableAttributes = null;
//**********************************************************************
// Main
//**********************************************************************
static public void
main(
String[] args)
{
new TableExplorer();
}
//**********************************************************************
// Constructors
//**********************************************************************
/**
* Create the TableExplorer JFrame.
*/
TableExplorer()
{
super("TableExplorer");
// Table with three columns
// Row 1: Buttons for managing component list
// Row 2: Component list
// Row 3: Attribute settings
setJMenuBar(createJMenuBar());
getContentPane().setLayout(
new TableLayout("cols=3 cgap=5 " +
"titop=2 tibottom=2 tileft=2 tiright=2"));
getContentPane().add(createButtonPane());
getContentPane().add(createListPane(), "cweight=1");
getContentPane().add(createAttributePane(), "n fh");
pack();
setVisible(true);
layout = new JFrame("Table Layout Preview");
layoutPane = (JPanel)layout.getContentPane();
layoutPane.setName("DEBUG");
layoutPane.setLayout(new TableLayout());
layoutPane.setOpaque(true);
code = new JFrame("Table Layout Code");
codePane = createCodePane();
code.setContentPane(codePane);
code.pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
compEntryField.grabFocus();
layout.setSize(300, 300);
}
//**********************************************************************
// Public
//**********************************************************************
public void
caretUpdate(
CaretEvent e)
{
if (e.getSource() == compEntryField) {
String text = compEntryField.getText();
addButton.setEnabled(text.length() > 0);
}
}
public void
actionPerformed(
ActionEvent e)
{
if (ignoreEvents) return;
if (e.getSource() == addButton ||
e.getSource() == compEntryField) {
String name = compEntryField.getText();
JButton button = new JButton(name);
addToLayout(button);
compHash.put(name, button);
attrHash.put(name, new Attributes());
compListModel.addElement(name);
compEntryField.setText("");
addButton.setEnabled(false);
}
else if (e.getSource() == removeButton) {
String name = (String)compList.getSelectedValue();
if (name != null) {
Component c = (Component)compHash.get(name);
layoutPane.remove(c);
compHash.remove(name);
attrHash.remove(name);
compListModel.removeElement(name);
removeButton.setEnabled(false);
layoutPane.revalidate();
}
}
else if (e.getSource() == upButton) {
int index = compList.getSelectedIndex();
if (index > 0) {
String name = (String)compListModel.elementAt(index);
compListModel.removeElementAt(index);
compListModel.insertElementAt(name, index - 1);
compList.setSelectedIndex(index - 1);
Component c = (Component)compHash.get(name);
Attributes a = (Attributes)attrHash.get(name);
layoutPane.remove(index);
layoutPane.add(c, a.toString(), index - 1);
layoutPane.revalidate();
}
}
else if (e.getSource() == downButton) {
int index = compList.getSelectedIndex();
if (index > -1 && index < compListModel.getSize() - 1) {
String name = (String)compListModel.elementAt(index);
compListModel.removeElementAt(index);
compListModel.insertElementAt(name, index + 1);
compList.setSelectedIndex(index + 1);
Component c = (Component)compHash.get(name);
Attributes a = (Attributes)attrHash.get(name);
layoutPane.remove(index);
layoutPane.add(c, a.toString(), index + 1);
layoutPane.revalidate();
}
}
else if (e.getSource() == insetFields[0] ||
e.getSource() == insetFields[1] ||
e.getSource() == insetFields[2] ||
e.getSource() == insetFields[3] ||
e.getSource() == positionBox ||
e.getSource() == fillBox ||
e.getSource() == rowWeightField ||
e.getSource() == colWeightField ||
e.getSource() == colPositionField ||
e.getSource() == skipCellsField ||
e.getSource() == rowSpanField ||
e.getSource() == colSpanField) {
String name = (String)compList.getSelectedValue();
changeLayout(name);
}
else if (e.getSource() == columnsField ||
e.getSource() == tableInsetFields[0] ||
e.getSource() == tableInsetFields[1] ||
e.getSource() == tableInsetFields[2] ||
e.getSource() == tableInsetFields[3] ||
e.getSource() == rowGapField ||
e.getSource() == colGapField ||
e.getSource() == tablePositionBox ||
e.getSource() == tableFillBox ||
e.getSource() == tableCellInsetFields[0] ||
e.getSource() == tableCellInsetFields[1] ||
e.getSource() == tableCellInsetFields[2] ||
e.getSource() == tableCellInsetFields[3] ||
e.getSource() == tableCellPositionBox ||
e.getSource() == tableCellFillBox ||
e.getSource() == tableRowWeightField ||
e.getSource() == tableColWeightField) {
changeTableLayout();
}
else if (e.getSource() == exitItem) {
System.exit(0);
}
else if (e.getSource() == previewItem) {
if (layout.isVisible()) {
layout.setVisible(false);
}
else {
layout.setVisible(true);
}
}
else if (e.getSource() == packItem) {
layout.pack();
}
else if (e.getSource() == codeItem) {
if (code.isVisible()) {
code.setVisible(false);
}
else {
generateCode();
code.setVisible(true);
}
}
else if (e.getSource() == generateItem) {
generateCode();
}
else if (e.getSource() == aboutItem) {
JOptionPane.showMessageDialog(this,
"" +
"
Table Explorer V1.0
" +
"Written by Antonio Freixas
" +
"tonyf@freixas.org",
"About Table Explorer",
JOptionPane.INFORMATION_MESSAGE);
}
}
public void
valueChanged(
ListSelectionEvent e)
{
if (ignoreEvents) return;
if (e.getSource() == compList) {
String name = (String)compList.getSelectedValue();
int index = compList.getSelectedIndex();
boolean hasObject = name != null;
removeButton.setEnabled(hasObject);
upButton.setEnabled(hasObject && index != 0);
downButton.setEnabled(hasObject &&
index != compListModel.getSize() - 1);
enableAttributes(hasObject);
if (hasObject) {
Attributes attributes = (Attributes)attrHash.get(name);
setAttributes(attributes);
}
}
}
public void
focusGained(
FocusEvent e)
{
if (e.getSource() == insetFields[0] ||
e.getSource() == insetFields[1] ||
e.getSource() == insetFields[2] ||
e.getSource() == insetFields[3] ||
e.getSource() == rowWeightField ||
e.getSource() == colWeightField ||
e.getSource() == colPositionField ||
e.getSource() == skipCellsField ||
e.getSource() == rowSpanField ||
e.getSource() == colSpanField||
e.getSource() == columnsField ||
e.getSource() == tableInsetFields[0] ||
e.getSource() == tableInsetFields[1] ||
e.getSource() == tableInsetFields[2] ||
e.getSource() == tableInsetFields[3] ||
e.getSource() == rowGapField ||
e.getSource() == colGapField ||
e.getSource() == tableCellInsetFields[0] ||
e.getSource() == tableCellInsetFields[1] ||
e.getSource() == tableCellInsetFields[2] ||
e.getSource() == tableCellInsetFields[3] ||
e.getSource() == tableRowWeightField ||
e.getSource() == tableColWeightField) {
JTextField field = (JTextField)e.getSource();
textWhenFocusGained = field.getText();
}
else if (e.getSource() == positionBox ||
e.getSource() == fillBox ||
e.getSource() == tablePositionBox ||
e.getSource() == tableFillBox ||
e.getSource() == tableCellPositionBox ||
e.getSource() == tableCellFillBox) {
JComboBox box = (JComboBox)e.getSource();
textWhenFocusGained = (String)box.getSelectedItem();
}
else {
textWhenFocusGained = null;
}
}
public void
focusLost(
FocusEvent e)
{
if (textWhenFocusGained != null) {
if (e.getSource() == insetFields[0] ||
e.getSource() == insetFields[1] ||
e.getSource() == insetFields[2] ||
e.getSource() == insetFields[3] ||
e.getSource() == rowWeightField ||
e.getSource() == colWeightField ||
e.getSource() == colPositionField ||
e.getSource() == skipCellsField ||
e.getSource() == rowSpanField ||
e.getSource() == colSpanField) {
JTextField field = (JTextField)e.getSource();
if (!textWhenFocusGained.equals(field.getText())) {
changeLayout();
}
}
else if (e.getSource() == positionBox ||
e.getSource() == fillBox) {
JComboBox box = (JComboBox)e.getSource();
if (!textWhenFocusGained.equals(box.getSelectedItem())) {
changeLayout();
}
}
else if (e.getSource() == columnsField ||
e.getSource() == tableInsetFields[0] ||
e.getSource() == tableInsetFields[1] ||
e.getSource() == tableInsetFields[2] ||
e.getSource() == tableInsetFields[3] ||
e.getSource() == rowGapField ||
e.getSource() == colGapField ||
e.getSource() == tableCellInsetFields[0] ||
e.getSource() == tableCellInsetFields[1] ||
e.getSource() == tableCellInsetFields[2] ||
e.getSource() == tableCellInsetFields[3] ||
e.getSource() == tableRowWeightField ||
e.getSource() == tableColWeightField) {
JTextField field = (JTextField)e.getSource();
if (!textWhenFocusGained.equals(field.getText())) {
changeTableLayout();
}
}
else if (e.getSource() == tablePositionBox ||
e.getSource() == tableFillBox ||
e.getSource() == tableCellPositionBox ||
e.getSource() == tableCellFillBox) {
JComboBox box = (JComboBox)e.getSource();
if (!textWhenFocusGained.equals(box.getSelectedItem())) {
changeTableLayout();
}
}
}
textWhenFocusGained = null;
}
public void
menuCanceled(
MenuEvent e)
{
}
public void
menuDeselected(
MenuEvent e)
{
}
public void
menuSelected(
MenuEvent e)
{
if (e.getSource() == windowMenu) {
if (layout.isVisible()) {
previewItem.setText("Hide Preview Window");
}
else {
previewItem.setText("Show Preview Window");
}
if (code.isVisible()) {
codeItem.setText("Hide Code Window");
}
else {
codeItem.setText("Show Code Window");
}
}
}
//**********************************************************************
// Package Public
//**********************************************************************
JMenuBar
createJMenuBar()
{
JMenuBar menuBar = new JMenuBar();
fileMenu = new JMenu("File");
menuBar.add(fileMenu);
windowMenu = new JMenu("Window");
windowMenu.addMenuListener(this);
menuBar.add(windowMenu);
helpMenu = new JMenu("Help");
menuBar.add(helpMenu);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
fileMenu.add(exitItem);
previewItem = new JMenuItem("Show Preview Window");
previewItem.addActionListener(this);
windowMenu.add(previewItem);
packItem = new JMenuItem("Pack Preview Window");
packItem.addActionListener(this);
windowMenu.add(packItem);
windowMenu.add(new JSeparator());
codeItem = new JMenuItem("Show Code Window");
codeItem.addActionListener(this);
windowMenu.add(codeItem);
generateItem = new JMenuItem("Generate Code");
generateItem.addActionListener(this);
windowMenu.add(generateItem);
aboutItem = new JMenuItem("About TableExplorer...");
aboutItem.addActionListener(this);
helpMenu.add(aboutItem);
return menuBar;
}
Component
createButtonPane()
{
JPanel topLevel = new JPanel(new TableLayout("cols=1"));
upButton = new JButton("Up");
upButton.setEnabled(false);
upButton.addActionListener(this);
downButton = new JButton("Down");
downButton.setEnabled(false);
downButton.addActionListener(this);
removeButton = new JButton("Remove");
removeButton.setEnabled(false);
removeButton.addActionListener(this);
addButton = new JButton("Add");
addButton.addActionListener(this);
topLevel.add(upButton);
topLevel.add(downButton, "rweight=1 n fh");
topLevel.add(removeButton, "rweight=1 s fh ");
topLevel.add(addButton);
return topLevel;
}
Component
createListPane()
{
JPanel topLevel = new JPanel(new TableLayout("cols=1 rgap=2"));
compListModel = new DefaultListModel();
compList = new JList(compListModel);
compList.setVisibleRowCount(20);
compList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
compList.addListSelectionListener(this);
compEntryField = new JTextField("Start Here!");
compEntryField.selectAll();
compEntryField.setColumns(20);
compEntryField.addCaretListener(this);
compEntryField.addActionListener(this);
topLevel.add(compList, "rweight=1");
topLevel.add(compEntryField);
return topLevel;
}
Component
createAttributePane()
{
JPanel topLevel = new JPanel(new TableLayout("cols=3 rgap=2 cgap=5"));
// Table Attributes
topLevel.add(new JLabel("Table Attributes"), "cspan=3");
JPanel spacer1= new JPanel();
spacer1.setSize(20, 1);
topLevel.add(spacer1);
topLevel.add(new JLabel("Columns"));
columnsField = new JTextField(10);
columnsField.addActionListener(this);
columnsField.addFocusListener(this);
topLevel.add(columnsField);
topLevel.add(new JLabel("Table insets"), "col=1");
topLevel.add(createInsetsPane(tableInsetFields));
topLevel.add(new JLabel("Row gap"), "col=1");
rowGapField = new JTextField(10);
rowGapField.addActionListener(this);
rowGapField.addFocusListener(this);
topLevel.add(rowGapField);
topLevel.add(new JLabel("Column gap"), "col=1");
colGapField = new JTextField(10);
colGapField.addActionListener(this);
colGapField.addFocusListener(this);
topLevel.add(colGapField);
topLevel.add(new JLabel("Table position"), "col=1");
tablePositionBox = new JComboBox(tablePositionList);
tablePositionBox.addActionListener(this);
topLevel.add(tablePositionBox);
topLevel.add(new JLabel("Table fill"), "col=1");
tableFillBox = new JComboBox(tableFillList);
tableFillBox.addActionListener(this);
topLevel.add(tableFillBox);
// Table Cell Defaults
topLevel.add(new JLabel("Table Cell Defaults"), "cspan=3 itop=20");
topLevel.add(new JLabel("Cell insets"), "col=1");
topLevel.add(createInsetsPane(tableCellInsetFields));
topLevel.add(new JLabel("Cell position"), "col=1");
tableCellPositionBox = new JComboBox(positionList);
tableCellPositionBox.addActionListener(this);
topLevel.add(tableCellPositionBox);
topLevel.add(new JLabel("Cell fill"), "col=1");
tableCellFillBox = new JComboBox(fillList);
tableCellFillBox.addActionListener(this);
topLevel.add(tableCellFillBox);
topLevel.add(new JLabel("Row weight"), "col=1");
tableRowWeightField = new JTextField(10);
tableRowWeightField.addActionListener(this);
tableRowWeightField.addFocusListener(this);
topLevel.add(tableRowWeightField);
topLevel.add(new JLabel("Column weight"), "col=1");
tableColWeightField = new JTextField(10);
tableColWeightField.addActionListener(this);
tableColWeightField.addFocusListener(this);
topLevel.add(tableColWeightField);
topLevel.add(new JLabel("Attributes"), "itop=5 col=0 cspan=2");
tableAttributesField = new JTextField();
tableAttributesField.setEditable(false);
topLevel.add(tableAttributesField, "itop=5");
// Make sure components are initialized as per the default table
// attributes
tableAttributes = new TableAttributes();
setTableAttributes(tableAttributes);
// Cell Attributes
topLevel.add(new JSeparator(), "cspan=3 itop=20 ibottom=5");
topLevel.add(new JLabel("Cell Attributes"), "cspan=3");
topLevel.add(new JLabel("Cell insets"), "col=1");
topLevel.add(createInsetsPane(insetFields));
topLevel.add(new JLabel("Cell position"), "col=1");
positionBox = new JComboBox(positionList);
positionBox.addActionListener(this);
topLevel.add(positionBox);
topLevel.add(new JLabel("Cell fill"), "col=1");
fillBox = new JComboBox(fillList);
fillBox.addActionListener(this);
topLevel.add(fillBox);
topLevel.add(new JLabel("Row weight"), "col=1");
rowWeightField = new JTextField(10);
rowWeightField.addActionListener(this);
rowWeightField.addFocusListener(this);
topLevel.add(rowWeightField);
topLevel.add(new JLabel("Column weight"), "col=1");
colWeightField = new JTextField(10);
colWeightField.addActionListener(this);
colWeightField.addFocusListener(this);
topLevel.add(colWeightField);
topLevel.add(new JLabel("Column position"), "col=1");
colPositionField = new JTextField(10);
colPositionField.addActionListener(this);
colPositionField.addFocusListener(this);
topLevel.add(colPositionField);
topLevel.add(new JLabel("Skip cells"), "col=1");
skipCellsField = new JTextField(10);
skipCellsField.addActionListener(this);
skipCellsField.addFocusListener(this);
topLevel.add(skipCellsField);
topLevel.add(new JLabel("Row span"), "col=1");
rowSpanField = new JTextField(10);
rowSpanField.addActionListener(this);
rowSpanField.addFocusListener(this);
topLevel.add(rowSpanField);
topLevel.add(new JLabel("Column span"), "col=1");
colSpanField = new JTextField(10);
colSpanField.addActionListener(this);
colSpanField.addFocusListener(this);
topLevel.add(colSpanField);
topLevel.add(new JLabel("Attributes"), "itop=5 col=0 cspan=2");
cellAttributesField = new JTextField();
cellAttributesField.setEditable(false);
topLevel.add(cellAttributesField, "itop=5");
enableAttributes(false);
return topLevel;
}
Component
createInsetsPane(
JTextField[] insetFields)
{
JPanel topLevel = new JPanel(new TableLayout("cols=3"));
for (int i = 0; i < 4; i++) {
insetFields[i] = new JTextField(2);
insetFields[i].addActionListener(this);
insetFields[i].addFocusListener(this);
}
topLevel.add(insetFields[0], "col=1");
topLevel.add(insetFields[1], "col=0");
topLevel.add(insetFields[2], "col=2");
topLevel.add(insetFields[3], "col=1");
return topLevel;
}
JPanel
createCodePane()
{
JPanel topLevel = new JPanel(new TableLayout("cols=2 rgap=2 cgap=5"));
codeTextArea = new JTextArea(15, 30);
codeTextScroll = new JScrollPane(codeTextArea);
topLevel.add(codeTextScroll, "cspan=2 rweight=1");
return topLevel;
}
void
addToLayout(
Component c)
{
try {
layoutPane.add(c);
}
catch (IllegalArgumentException e) {
JOptionPane.showMessageDialog(
this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
}
layoutPane.revalidate();
}
void
addToLayout(
Component c,
String a,
int index)
{
try {
layoutPane.add(c, a, index);
}
catch (IllegalArgumentException e) {
JOptionPane.showMessageDialog(
this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
}
layoutPane.revalidate();
}
void
changeTableLayout()
{
tableAttributes = getTableAttributes();
try {
((TableLayout)layoutPane.getLayout()).setTableAttributes(
tableAttributes.toString());
}
catch (IllegalArgumentException e) {
JOptionPane.showMessageDialog(
this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
}
layoutPane.revalidate();
setTableAttributes(tableAttributes); // Normalize appearance
}
void
changeLayout()
{
String name = (String)compList.getSelectedValue();
changeLayout(name);
}
void
changeLayout(
String name)
{
if (name == null) return;
Component c = (Component)compHash.get(name);
Attributes attributes = getAttributes();
try {
((TableLayout)layoutPane.getLayout()).setAttributes(
c, attributes.toString());
}
catch (IllegalArgumentException e) {
JOptionPane.showMessageDialog(
this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
}
layoutPane.revalidate();
setAttributes(attributes); // Normalize appearance
attrHash.put(name, attributes);
}
TableAttributes
getTableAttributes()
{
TableAttributes attributes = new TableAttributes();
attributes.columns = getNumber(attributes.columns, columnsField);
attributes.rGap = getNumber(attributes.rGap, rowGapField);
attributes.cGap = getNumber(attributes.cGap, colGapField);
attributes.tableInsets.top =
getNumber(attributes.tableInsets.top, tableInsetFields[0]);
attributes.tableInsets.left =
getNumber(attributes.tableInsets.left, tableInsetFields[1]);
attributes.tableInsets.right =
getNumber(attributes.tableInsets.right, tableInsetFields[2]);
attributes.tableInsets.bottom =
getNumber(attributes.tableInsets.bottom, tableInsetFields[3]);
attributes.tablePosition = getString(tablePositionBox);
attributes.tableFill = getString(tableFillBox);
attributes.insets.top =
getNumber(attributes.insets.top, tableCellInsetFields[0]);
attributes.insets.left =
getNumber(attributes.insets.left, tableCellInsetFields[1]);
attributes.insets.right =
getNumber(attributes.insets.right, tableCellInsetFields[2]);
attributes.insets.bottom =
getNumber(attributes.insets.bottom, tableCellInsetFields[3]);
attributes.position = getString(tableCellPositionBox);
attributes.fill = getString(tableCellFillBox);
attributes.rWeight = getNumber(attributes.rWeight, tableRowWeightField);
attributes.cWeight = getNumber(attributes.cWeight, tableColWeightField);
return attributes;
}
void
setTableAttributes(
TableAttributes attributes)
{
ignoreEvents = true;
columnsField.setText(Integer.toString(attributes.columns));
rowGapField.setText(Integer.toString(attributes.rGap));
colGapField.setText(Integer.toString(attributes.cGap));
tableInsetFields[0].setText(
Integer.toString(attributes.tableInsets.top));
tableInsetFields[1].setText(
Integer.toString(attributes.tableInsets.left));
tableInsetFields[2].setText(
Integer.toString(attributes.tableInsets.right));
tableInsetFields[3].setText(
Integer.toString(attributes.tableInsets.bottom));
tablePositionBox.setSelectedItem(attributes.tablePosition);
tableFillBox.setSelectedItem(attributes.tableFill);
tableCellInsetFields[0].setText(
Integer.toString(attributes.insets.top));
tableCellInsetFields[1].setText(
Integer.toString(attributes.insets.left));
tableCellInsetFields[2].setText(
Integer.toString(attributes.insets.right));
tableCellInsetFields[3].setText(
Integer.toString(attributes.insets.bottom));
tableCellPositionBox.setSelectedItem(attributes.position);
tableCellFillBox.setSelectedItem(attributes.fill);
tableRowWeightField.setText(Integer.toString(attributes.rWeight));
tableColWeightField.setText(Integer.toString(attributes.cWeight));
tableAttributesField.setText(attributes.toString());
ignoreEvents = false;
}
Attributes
getAttributes()
{
Attributes attributes = new Attributes();
attributes.insets.top =
getNumber(attributes.insets.top, insetFields[0]);
attributes.insets.left =
getNumber(attributes.insets.left, insetFields[1]);
attributes.insets.right =
getNumber(attributes.insets.right, insetFields[2]);
attributes.insets.bottom =
getNumber(attributes.insets.bottom, insetFields[3]);
attributes.position = getString(positionBox);
attributes.fill = getString(fillBox);
attributes.rWeight = getNumber(attributes.rWeight, rowWeightField);
attributes.cWeight = getNumber(attributes.cWeight, colWeightField);
attributes.column = getNumber(attributes.column, colPositionField);
attributes.skip = getNumber(attributes.skip, skipCellsField);
attributes.rSpan = getNumber(attributes.rSpan, rowSpanField);
attributes.cSpan = getNumber(attributes.cSpan, colSpanField);
return attributes;
}
void
setAttributes(
Attributes attributes)
{
ignoreEvents = true;
insetFields[0].setText(Integer.toString(attributes.insets.top));
insetFields[1].setText(Integer.toString(attributes.insets.left));
insetFields[2].setText(Integer.toString(attributes.insets.right));
insetFields[3].setText(Integer.toString(attributes.insets.bottom));
positionBox.setSelectedItem(attributes.position);
fillBox.setSelectedItem(attributes.fill);
rowWeightField.setText(Integer.toString(attributes.rWeight));
colWeightField.setText(Integer.toString(attributes.cWeight));
colPositionField.setText(Integer.toString(attributes.column));
skipCellsField.setText(Integer.toString(attributes.skip));
rowSpanField.setText(Integer.toString(attributes.rSpan));
colSpanField.setText(Integer.toString(attributes.cSpan));
cellAttributesField.setText(attributes.toString());
ignoreEvents = false;
}
int
getNumber(
int defaultValue,
JTextField field)
{
String text = field.getText().trim();
if (text.length() == 0) return defaultValue;
int value = 0;
try {
value = Integer.parseInt(text);
}
catch (NumberFormatException e) {}
return value;
}
String
getString(
JComboBox box)
{
return (String)box.getSelectedItem();
}
void
enableAttributes(
boolean enable)
{
positionBox.setEnabled(enable);
fillBox.setEnabled(enable);
rowWeightField.setEnabled(enable);
colWeightField.setEnabled(enable);
colPositionField.setEnabled(enable);
skipCellsField.setEnabled(enable);
rowSpanField.setEnabled(enable);
colSpanField.setEnabled(enable);
for (int i = 0; i < 4; i++) {
insetFields[i].setEnabled(enable);
}
}
void
generateCode()
{
tableAttributes = getTableAttributes();
String indent = "";
String containerName = "";
StringBuffer code = new StringBuffer(
indent + "// Code generated by Table Explorer V1.0\n" +
indent +
"// Copyright © 2004, Antonio Freixas\n" +
indent + "// All Rights Reserved.\n" +
indent + "// tony@freixas.org\n\n" +
indent + "// Define the table layout\n\n" +
indent + "JPanel panel = new JPanel(new TableLayout(" +
"\"" + tableAttributes.toString().trim() + "\"));\n\n");
for (int i = 0; i < compListModel.size(); i++) {
String name = (String)compListModel.elementAt(i);
Attributes attr = (Attributes)attrHash.get(name);
String sAttr = attr.toString().trim();
code.append(
indent + "panel.add(new JButton(\"" + name + "\"" +
(sAttr.length() > 0 ? ", \"" + sAttr + "\"" : "") + "));\n");
}
codeTextArea.setText(code.toString());
}
//**********************************************************************
// Protected
//**********************************************************************
//**********************************************************************
// Private
//**********************************************************************
//**********************************************************************
// Inner Classes
//**********************************************************************
class TableAttributes
{
// Table-only options
int columns = 1;
int rGap = 0;
int cGap = 0;
Insets tableInsets = new Insets(0, 0, 0, 0);
String tablePosition = "Default";
String tableFill = "Default";
// Table/cell options
Insets insets = new Insets(0, 0, 0, 0);
String position = "Default";
String fill = "Default";
int rWeight = 0;
int cWeight = 0;
public String
toString()
{
StringBuffer b = new StringBuffer();
if (columns != 1) {
b.append("cols=" + columns + " ");
}
if (rGap != 0) {
b.append("rgap=" + rGap + " ");
}
if (cGap != 0) {
b.append("cgap=" + cGap + " ");
}
if (tableInsets.top != 0) {
b.append("titop=" + tableInsets.top + " ");
}
if (tableInsets.bottom != 0) {
b.append("tibottom=" + tableInsets.bottom + " ");
}
if (tableInsets.left != 0) {
b.append("tileft=" + tableInsets.left + " ");
}
if (tableInsets.right != 0) {
b.append("tiright=" + tableInsets.right + " ");
}
if (!"Default".equals(tablePosition)) {
b.append(tablePosition + " ");
}
if (!"Default".equals(tableFill)) {
b.append(tableFill + " ");
}
if (insets.top != 0) {
b.append("itop=" + insets.top + " ");
}
if (insets.bottom != 0) {
b.append("ibottom=" + insets.bottom + " ");
}
if (insets.left != 0) {
b.append("ileft=" + insets.left + " ");
}
if (insets.right != 0) {
b.append("iright=" + insets.right + " ");
}
if (!"Default".equals(position)) {
b.append(position + " ");
}
if (!"Default".equals(fill)) {
b.append(fill + " ");
}
if (rWeight != 0) {
b.append("rweight=" + rWeight + " ");
}
if (cWeight != 0) {
b.append("cweight=" + cWeight + " ");
}
return new String(b);
}
}
class Attributes
{
Insets insets = new Insets(0, 0, 0, 0);
String position = "Default";
String fill = "Default";
int rWeight = 0;
int cWeight = 0;
int column = -1;
int skip = 0;
int rSpan = 1;
int cSpan = 1;
public String
toString()
{
StringBuffer b = new StringBuffer();
if (insets.top != tableAttributes.insets.top) {
b.append("itop=" + insets.top + " ");
}
if (insets.bottom != tableAttributes.insets.bottom) {
b.append("ibottom=" + insets.bottom + " ");
}
if (insets.left != tableAttributes.insets.left) {
b.append("ileft=" + insets.left + " ");
}
if (insets.right != tableAttributes.insets.right) {
b.append("iright=" + insets.right + " ");
}
if (!"Default".equals(position)) {
b.append(position + " ");
}
if (!"Default".equals(fill)) {
b.append(fill + " ");
}
if (rWeight != tableAttributes.rWeight) {
b.append("rweight=" + rWeight + " ");
}
if (cWeight != tableAttributes.cWeight) {
b.append("cweight=" + cWeight + " ");
}
if (column != -1) {
b.append("col=" + column + " ");
}
if (skip != 0) {
b.append("skip=" + skip + " ");
}
if (rSpan != 1) {
b.append("rspan=" + rSpan + " ");
}
if (cSpan != 1) {
b.append("cspan=" + cSpan + " ");
}
return new String(b);
}
}
//**********************************************************************
// End Inner Classes
//**********************************************************************
}