Java by API/javax.swing.table/TableColumn
Содержание
- 1 new TableColumn(int modelIndex)
- 2 TableColumn: getModelIndex()
- 3 TableColumn: setCellEditor(TableCellEditor cellEditor)
- 4 TableColumn: setCellRenderer(TableCellRenderer cellRenderer)
- 5 TableColumn: setHeaderRenderer(TableCellRenderer headerRenderer)
- 6 TableColumn: setHeaderValue(Object headerValue)
- 7 TableColumn: setMaxWidth(int maxWidth)
- 8 TableColumn: setMinWidth(int minWidth)
- 9 TableColumn: setPreferredWidth(int preferredWidth)
new TableColumn(int modelIndex)
<source lang="java">
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.ChangeEvent; import javax.swing.event.ListSelectionEvent; import javax.swing.event.TableColumnModelEvent; import javax.swing.event.TableColumnModelListener; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class MainClass {
public static void main(String args[]) { Object rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } }; Object headers[] = { "Upper", "Lower" }; JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(rows, headers); TableColumnModelListener tableColumnModelListener = new TableColumnModelListener() { public void columnAdded(TableColumnModelEvent e) { System.out.println("Added"); } public void columnMarginChanged(ChangeEvent e) { System.out.println("Margin"); } public void columnMoved(TableColumnModelEvent e) { System.out.println("Moved"); } public void columnRemoved(TableColumnModelEvent e) { System.out.println("Removed"); } public void columnSelectionChanged(ListSelectionEvent e) { System.out.println("Selection Changed"); } }; TableColumnModel columnModel = table.getColumnModel(); columnModel.addColumnModelListener(tableColumnModelListener); columnModel.setColumnMargin(12); TableColumn column = new TableColumn(1); columnModel.addColumn(column); JScrollPane pane = new JScrollPane(table); frame.add(pane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }
}
</source>
TableColumn: getModelIndex()
<source lang="java">
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; public class MainClass extends JFrame {
public MainClass() { super("Abstract Model JTable Test"); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); DefaultTableModel dtm = new DefaultTableModel(new String[][] { { "1", "2", "3" }, { "4", "5", "6" } }, new String[] { "Names", "In", "Order" }); SortingColumnModel scm = new SortingColumnModel(); JTable jt = new JTable(dtm, scm); jt.createDefaultColumnsFromModel(); JScrollPane jsp = new JScrollPane(jt); getContentPane().add(jsp, BorderLayout.CENTER); } public static void main(String args[]) { MainClass ce = new MainClass(); ce.setVisible(true); }
} class SortingColumnModel extends DefaultTableColumnModel {
public void addColumn(TableColumn tc) { super.addColumn(tc); int newIndex = sortedIndexOf(tc); if (newIndex != tc.getModelIndex()) { moveColumn(tc.getModelIndex(), newIndex); } } protected int sortedIndexOf(TableColumn tc) { int stop = getColumnCount(); String name = tc.getHeaderValue().toString(); for (int i = 0; i < stop; i++) { if (name.rupareTo(getColumn(i).getHeaderValue().toString()) <= 0) { return i; } } return stop; }
}
</source>
TableColumn: setCellEditor(TableCellEditor cellEditor)
<source lang="java">
import java.awt.BorderLayout; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; public class MainClass {
public static void main(String args[]) { String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } }; String headers[] = { "Upper", "Lower" }; JComboBox comboBox = new JComboBox(rows[0]); comboBox.setMaximumRowCount(4); TableCellEditor editor = new DefaultCellEditor(comboBox); JFrame frame = new JFrame("JTable Anatomy"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(new DefaultTableModel(rows, headers)); table.getColumnModel().getColumn(1).setCellEditor(editor); JScrollPane scrollPane = new JScrollPane(table); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }
}
</source>
TableColumn: setCellRenderer(TableCellRenderer cellRenderer)
<source lang="java">
import java.awt.BorderLayout; import java.awt.Color; import java.awt.ruponent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractCellEditor; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; public class MainClass {
public static void main(String args[]) { JFrame frame = new JFrame("Editable Color Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); TableModel model = new ColorTableModel(); JTable table = new JTable(model); TableColumn column = table.getColumnModel().getColumn(2); ComboTableCellRenderer renderer = new ComboTableCellRenderer(); column.setCellRenderer(renderer); TableCellEditor editor = new ColorChooserEditor(); column.setCellEditor(editor); JScrollPane scrollPane = new JScrollPane(table); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(400, 150); frame.setVisible(true); }
} class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor {
private JButton delegate = new JButton(); Color savedColor; public ColorChooserEditor() { ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { Color color = JColorChooser.showDialog(delegate, "Color Chooser", savedColor); ColorChooserEditor.this.changeColor(color); } }; delegate.addActionListener(actionListener); } public Object getCellEditorValue() { return savedColor; } private void changeColor(Color color) { if (color != null) { savedColor = color; } } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { changeColor((Color) value); return delegate; }
} class ComboTableCellRenderer implements TableCellRenderer {
DefaultListCellRenderer listRenderer = new DefaultListCellRenderer(); DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer(); private void configureRenderer(JLabel renderer, Object value) { renderer.setBackground((Color)value); }
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { tableRenderer = (DefaultTableCellRenderer) tableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); configureRenderer(tableRenderer, value); return tableRenderer; }
} class ColorTableModel extends AbstractTableModel {
Object rowData[][] = { { "1", Boolean.TRUE, Color.RED }, { "2", Boolean.TRUE, Color.BLUE }, { "3", Boolean.FALSE, Color.GREEN }, { "4", Boolean.TRUE, Color.MAGENTA }, { "5", Boolean.FALSE, Color.PINK }, }; String columnNames[] = { "Number", "Boolean", "Color" }; public int getColumnCount() { return columnNames.length; } public String getColumnName(int column) { return columnNames[column]; } public int getRowCount() { return rowData.length; } public Object getValueAt(int row, int column) { return rowData[row][column]; } public Class getColumnClass(int column) { return (getValueAt(0, column).getClass()); } public void setValueAt(Object value, int row, int column) { rowData[row][column] = value; } public boolean isCellEditable(int row, int column) { return (column != 0); }
}
</source>
TableColumn: setHeaderRenderer(TableCellRenderer headerRenderer)
<source lang="java">
import java.awt.BorderLayout; import java.awt.ruponent; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class MainClass {
public static void main(String args[]) { String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } }; String headers[] = { "Upper", "Lower" }; JFrame frame = new JFrame("Label Header"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(rows, headers); JScrollPane scrollPane = new JScrollPane(table); Border headerBorder = UIManager.getBorder("TableHeader.cellBorder"); JLabel headerLabel1 = new JLabel(headers[0], JLabel.CENTER); headerLabel1.setBorder(headerBorder); JLabel headerLabel2 = new JLabel(headers[1], JLabel.CENTER); headerLabel2.setBorder(headerBorder); TableCellRenderer renderer = new JComponentTableCellRenderer(); TableColumnModel columnModel = table.getColumnModel(); TableColumn column0 = columnModel.getColumn(0); TableColumn column1 = columnModel.getColumn(1); column0.setHeaderRenderer(renderer); column0.setHeaderValue(headerLabel1); column1.setHeaderRenderer(renderer); column1.setHeaderValue(headerLabel2); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }
} class JComponentTableCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return (JComponent)value; }
}
</source>
TableColumn: setHeaderValue(Object headerValue)
<source lang="java">
import java.awt.BorderLayout; import java.awt.ruponent; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class MainClass {
public static void main(String args[]) { String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } }; String headers[] = { "Upper", "Lower" }; JFrame frame = new JFrame("Label Header"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(rows, headers); JScrollPane scrollPane = new JScrollPane(table); Border headerBorder = UIManager.getBorder("TableHeader.cellBorder"); JLabel headerLabel1 = new JLabel(headers[0], JLabel.CENTER); headerLabel1.setBorder(headerBorder); JLabel headerLabel2 = new JLabel(headers[1], JLabel.CENTER); headerLabel2.setBorder(headerBorder); TableCellRenderer renderer = new JComponentTableCellRenderer(); TableColumnModel columnModel = table.getColumnModel(); TableColumn column0 = columnModel.getColumn(0); TableColumn column1 = columnModel.getColumn(1); column0.setHeaderRenderer(renderer); column0.setHeaderValue(headerLabel1); column1.setHeaderRenderer(renderer); column1.setHeaderValue(headerLabel2); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }
} class JComponentTableCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return (JComponent)value; }
}
</source>
TableColumn: setMaxWidth(int maxWidth)
<source lang="java">
import javax.swing.JTable; import javax.swing.table.TableColumn; public class Main {
public static void main(String[] argv) throws Exception { int rows = 3; int cols = 3; JTable table = new JTable(rows, cols); TableColumn col = table.getColumnModel().getColumn(0); col.setMinWidth(100); col.setMaxWidth(100); col.setPreferredWidth(100); }
}
</source>
TableColumn: setMinWidth(int minWidth)
<source lang="java">
import javax.swing.JTable; import javax.swing.table.TableColumn; public class Main {
public static void main(String[] argv) throws Exception { int rows = 3; int cols = 3; JTable table = new JTable(rows, cols); TableColumn col = table.getColumnModel().getColumn(0); col.setMinWidth(100); col.setMaxWidth(100); col.setPreferredWidth(100); }
}
</source>
TableColumn: setPreferredWidth(int preferredWidth)
<source lang="java">
import javax.swing.JTable; import javax.swing.table.TableColumn; public class Main {
public static void main(String[] argv) throws Exception { int rows = 3; int cols = 3; JTable table = new JTable(rows, cols); TableColumn col = table.getColumnModel().getColumn(0); col.setMinWidth(100); col.setMaxWidth(100); col.setPreferredWidth(100); }
}
</source>