📄 gridbagtester.java
字号:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class GridBagTester extends JFrame {
protected Container container;
protected GridBagLayout manager;
protected ColumnPanel columnPanel;
protected RowPanel rowPanel;
protected ComponentPanel componentPanel;
public final static int COMPONENT_NAME = 0;
public final static int COMPONENT_X = 1;
public final static int COMPONENT_Y = 2;
public final static int COMPONENT_WIDTH = 3;
public final static int COMPONENT_HEIGHT = 4;
public final static int COMPONENT_MINSIZE = 5;
public final static int COMPONENT_PREFSIZE = 6;
public final static int GRIDX = 7;
public final static int GRIDY = 8;
public final static int GRIDWIDTH = 9;
public final static int GRIDHEIGHT = 10;
public final static int FILL = 11;
public final static int ANCHOR = 12;
public final static int IPADX = 13;
public final static int IPADY = 14;
public final static int WEIGHTX = 15;
public final static int WEIGHTY = 16;
public final static int INSETS_TOP = 17;
public final static int INSETS_LEFT = 18;
public final static int INSETS_BOTTOM = 19;
public final static int INSETS_RIGHT = 20;
public final static int COLUMN_COUNT = 21;
public final static Object[][] FILL_VALUES = {{
new Integer(GridBagConstraints.NONE),
new Integer(GridBagConstraints.HORIZONTAL),
new Integer(GridBagConstraints.VERTICAL),
new Integer(GridBagConstraints.BOTH)},
{"NONE", "HORIZONTAL", "VERTICAL", "BOTH"}};
public final static Object[][] ANCHOR_VALUES = {{
new Integer(GridBagConstraints.NORTH),
new Integer(GridBagConstraints.NORTHEAST),
new Integer(GridBagConstraints.EAST),
new Integer(GridBagConstraints.SOUTHEAST),
new Integer(GridBagConstraints.SOUTH),
new Integer(GridBagConstraints.SOUTHWEST),
new Integer(GridBagConstraints.WEST),
new Integer(GridBagConstraints.NORTHWEST),
new Integer(GridBagConstraints.CENTER)},
{"NORTH", "NORTHEAST", "EAST", "SOUTHEAST",
"SOUTH", "SOUTHWEST", "WEST", "NORTHWEST",
"CENTER"}};
public final static Object[][] SIZE_VALUES = {{
new Integer(GridBagConstraints.RELATIVE),
new Integer(GridBagConstraints.REMAINDER)},
{"RELATIVE", "REMAINDER"}};
public final static Object[][] POSITION_VALUES = {{
new Integer(GridBagConstraints.RELATIVE)},
{"RELATIVE"}};
public final static int NUMERIC_VALUE = 0;
public final static int STRING_VALUE = 1;
public GridBagTester(Container cont) {
super("GridBagLayout Tester");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container = cont;
manager = (GridBagLayout)(container.getLayout());
manager.layoutContainer(container);
buildLayout();
pack();
setVisible(true);
}
protected void buildLayout() {
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
columnPanel = new ColumnPanel();
pane.add(columnPanel, BorderLayout.NORTH);
rowPanel = new RowPanel();
pane.add(rowPanel, BorderLayout.WEST);
componentPanel = new ComponentPanel();
pane.add(componentPanel, BorderLayout.SOUTH);
pane.add(container, BorderLayout.CENTER);
}
class ColumnPanel extends JPanel {
protected ColumnModel columnModel;
public ColumnPanel() {
super();
setBorder(BorderFactory.createTitledBorder(
"Column Widths and Weights"));
columnModel = new ColumnModel();
setLayout(new BorderLayout());
JTable table = new JTable(columnModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setPreferredScrollableViewportSize(
new Dimension(10, 55));
JScrollPane jsp = new JScrollPane(table);
JTable hdrTable = new JTable(new ColumnHeaderModel());
hdrTable.setPreferredScrollableViewportSize(
new Dimension(75, 50));
jsp.setRowHeaderView(hdrTable);
add(jsp, BorderLayout.CENTER);
}
public void refreshTable() {
columnModel.fireTableDataChanged();
}
}
class ColumnHeaderModel extends AbstractTableModel {
final String[] headers = {"Width", "weightX",
"Percent"};
public int getRowCount() {
return 3;
}
public int getColumnCount() {
return 1;
}
public Object getValueAt(int row, int column) {
return headers[row];
}
}
class ColumnModel extends AbstractTableModel {
public final int COLUMN_WIDTH = 0;
public final int COLUMN_WEIGHT = 1;
public final int COLUMN_DISTRIBUTION_PERCENT = 2;
public int getRowCount() {
return 3;
}
public int getColumnCount() {
int[][] dimensions = manager.getLayoutDimensions();
return dimensions[0].length;
}
public Object getValueAt(int row, int column) {
Object value = null;
int[][] dimensions;
double[][] weights;
switch (row) {
case COLUMN_WIDTH:
dimensions =
manager.getLayoutDimensions();
value = new Integer(
dimensions[0][column]);
break;
case COLUMN_WEIGHT:
weights = manager.getLayoutWeights();
value = new Double(weights[0][column]);
break;
case COLUMN_DISTRIBUTION_PERCENT:
weights = manager.getLayoutWeights();
int count = weights[0].length;
double total = 0;
for (int i = 0; i < count; i++) {
total += weights[0][i];
}
double percent = weights[0][column] /
total * 100;
value = new Integer((int)percent);
break;
}
return value;
}
public String getColumnName(int column) {
return new Integer(column).toString();
}
}
class RowPanel extends JPanel {
protected RowModel rowModel;
public RowPanel() {
super();
setBorder(BorderFactory.createTitledBorder(
"Row Heights and Weights"));
rowModel = new RowModel();
setLayout(new BorderLayout());
JTable table = new JTable(rowModel);
table.setPreferredScrollableViewportSize(
new Dimension(150, 10));
JScrollPane jsp = new JScrollPane(table);
JTable hdrTable = new JTable(new RowHeaderModel());
hdrTable.setPreferredScrollableViewportSize(
new Dimension(25, 10));
jsp.setRowHeaderView(hdrTable);
add(jsp, BorderLayout.CENTER);
}
public void refreshTable() {
rowModel.fireTableDataChanged();
}
}
class RowHeaderModel extends AbstractTableModel {
public int getRowCount() {
int[][] dimensions = manager.getLayoutDimensions();
return dimensions[1].length;
}
public int getColumnCount() {
return 1;
}
public Object getValueAt(int row, int column) {
return new Integer(row);
}
}
class RowModel extends AbstractTableModel {
public final int ROW_HEIGHT = 0;
public final int ROW_WEIGHT = 1;
public final int ROW_DISTRIBUTION_PERCENT = 2;
final String[] headers = {"Height", "weightY", "Percent"};
public int getRowCount() {
int[][] dimensions = manager.getLayoutDimensions();
return dimensions[1].length;
}
public int getColumnCount() {
return 3;
}
public Object getValueAt(int row, int column) {
Object value = null;
int[][] dimensions;
double[][] weights;
switch (column) {
case ROW_HEIGHT:
dimensions =
manager.getLayoutDimensions();
value = new Integer(dimensions[1][row]);
break;
case ROW_WEIGHT:
weights = manager.getLayoutWeights();
value = new Double(weights[1][row]);
break;
case ROW_DISTRIBUTION_PERCENT:
weights = manager.getLayoutWeights();
int count = weights[1].length;
double total = 0;
for (int i = 0; i < count; i++) {
total += weights[1][i];
}
double percent = weights[1][row] /
total * 100;
value = new Integer((int)percent);
break;
}
return value;
}
public String getColumnName(int column) {
return headers[column];
}
}
class ComponentPanel extends JPanel {
protected ComponentModel componentModel;
public ComponentPanel() {
super();
setBorder(BorderFactory.createTitledBorder(
"Component Constraints"));
componentModel = new ComponentModel();
setLayout(new BorderLayout());
JTable table = new JTable(componentModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setRowSelectionAllowed(false);
table.setDefaultRenderer(Dimension.class,
new DimensionCellRenderer());
table.setDefaultEditor(Double.class,
new DoubleCellEditor());
table.setDefaultEditor(Integer.class,
new IntegerCellEditor());
TableColumnModel tcm = table.getColumnModel();
ConstraintDataCellRenderer cdcr =
new ConstraintDataCellRenderer();
ComboBoxCellEditor cbce = new ComboBoxCellEditor();
TableColumn tc = tcm.getColumn(FILL);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
tc = tcm.getColumn(ANCHOR);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
tc = tcm.getColumn(GRIDX);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
tc = tcm.getColumn(GRIDY);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
tc = tcm.getColumn(GRIDWIDTH);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
tc = tcm.getColumn(GRIDHEIGHT);
tc.setCellRenderer(cdcr);
tc.setCellEditor(cbce);
table.setPreferredScrollableViewportSize(
new Dimension(10, 105));
JScrollPane jsp = new JScrollPane(table);
add(jsp, BorderLayout.CENTER);
}
public void refreshTable() {
componentModel.fireTableDataChanged();
}
}
class ComponentModel extends AbstractTableModel {
public final String[] headers = {"Name", "X", "Y",
"width", "height", "minSize", "prefSize",
"gridx", "gridy", "gridwidth", "gridheight",
"fill", "anchor", "ipadx", "ipady", "weightx",
"weighty", "top", "left", "bottom", "right"};
public int getRowCount() {
return container.getComponents().length;
}
public int getColumnCount() {
return COLUMN_COUNT;
}
public boolean isCellEditable(int row, int column) {
switch (column) {
case COMPONENT_MINSIZE:
case COMPONENT_PREFSIZE:
return false;
}
return true;
}
public Object getValueAt(int row, int column) {
Object value = null;
Component comp = container.getComponents()[row];
GridBagConstraints gbc = manager.getConstraints(comp);
switch (column) {
case COMPONENT_NAME:
String name = comp.getName();
if ((name == null) ||
(name.length() == 0)) {
Class cl = comp.getClass();
name = cl.getName();
int ind =
name.lastIndexOf('.');
value = name.substring(ind + 1);
}
else {
value = name;
}
break;
case COMPONENT_X:
value = new Integer(comp.getLocation().x);
break;
case COMPONENT_Y:
value = new Integer(comp.getLocation().y);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -