📄 dbtable.java
字号:
package org.trinet.util.graphics.table;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.Arrays;
import org.trinet.util.*;
public class DBTable {
static final int DEFAULT_FONT_SIZE = 12;
static final Font DEFAULT_TABLE_FONT = new Font("Monospaced", Font.PLAIN, DEFAULT_FONT_SIZE);
Font font = DEFAULT_TABLE_FONT;
static final int DEFAULT_BLOCK_ROWS = 9;
public JTable tableRowHead;
public JTable tableView;
TableSorterAbs sorter = new TableSorterAbs();
public JDBCAdapter tableModel;
JScrollPane tableDB;
Color defaultBgColor = new Color(1.f, 1.f, 0.7f); // light yellow;
Color keyBgColor = new Color (1.f, 0.8f, 0.35f); // orange;
Color nonNullBgColor = Color.green;
Color selectedBgColor = Color.yellow;
// int [] displayedColumns;
// DBTable constructor
public DBTable(JDBCAdapter tableModel) {
initTableModel(tableModel);
}
public void setTableCellBackgroundColors(Color defaultColor, Color keyColor, Color nonNullColor, Color selectedColor) {
if (defaultColor != null) defaultBgColor = defaultColor;
if (keyColor != null) keyBgColor = keyColor;
if (nonNullColor != null) nonNullBgColor = nonNullColor;
if (selectedColor != null) selectedBgColor = selectedColor;
}
/*
public void setDisplayColumnIndices(int [] order) {
displayedColumns = order;
}
void setTableDisplayColumns(JTable dataTable, int [] orderIndex) {
if (orderIndex == null) return;
if (orderIndex.length == 0) return;
int colCount = dataTable.getColumnCount();
if (orderIndex.length > colCount) return;
TableColumnModel tcm = dataTable.getColumnModel();
TableColumnModel tcm2 = new DefaultTableColumnModel();
TableColumn col;
for (int i = 0; i<colCount; i++) {
col = tcm.getColumn(orderIndex[i]));
if (col != null) tcm2.addColumn(col);
}
dataTable.setColumnModel(tcm2);
}
*/
public JScrollPane createTable(JDBCAdapter tableModel) {
initTableModel(tableModel);
return createTable();
}
public JScrollPane createTable() {
// Debug.println("DBTable setting up JTable scrollpane ...");
tableView = new JTable(sorter);
setTableAppearance(tableView);
setTableSelectionState(tableView);
// Debug.println("DBTable setting up RowHeader cell renderers/editors...");
setTableColumnRenderersEditors(tableView, defaultBgColor, nonNullBgColor, selectedBgColor);
initTableColumnSizes(tableView);
// setTableDisplayColumns(tableview, displayedColumns);
tableRowHead = createRowHeaderTable(tableView);
setTableAppearance(tableRowHead);
setTableSelectionState(tableRowHead);
setTableColumnRenderersEditors(tableRowHead, keyBgColor, keyBgColor, selectedBgColor);
initTableColumnSizes(tableRowHead);
addListeners();
tableDB = createTableScrollPane();
return tableDB;
} // end of createTable() method
private JScrollPane createTableScrollPane() {
tableRowHead.setPreferredScrollableViewportSize(tableRowHead.getPreferredSize());
tableView.setPreferredScrollableViewportSize(tableView.getPreferredSize());
JScrollPane scrollpane = null;
if (tableView.getColumnCount() <= 0) {
System.out.println("DBTable: tableView has no non-key columns");
scrollpane = new JScrollPane(tableRowHead);
}
else scrollpane = new JScrollPane(tableView);
scrollpane.setRowHeaderView(tableRowHead);
scrollpane.setCorner(JScrollPane.UPPER_LEFT_CORNER, tableRowHead.getTableHeader());
int incr = tableView.getRowHeight() + tableView.getRowMargin();
scrollpane.getVerticalScrollBar().setUnitIncrement(incr);
scrollpane.getVerticalScrollBar().setBlockIncrement(incr*DEFAULT_BLOCK_ROWS);
JButton jbDown = new JButton();
jbDown.setActionCommand("D");
ScrollingActionListener scrollingActionListener = new ScrollingActionListener();
jbDown.addActionListener(scrollingActionListener);
scrollpane.setCorner(JScrollPane.LOWER_RIGHT_CORNER, jbDown);
JButton jbUp = new JButton();
jbUp.setActionCommand("U");
jbUp.addActionListener(scrollingActionListener);
scrollpane.setCorner(JScrollPane.UPPER_RIGHT_CORNER, jbUp);
return scrollpane;
}
public void setScrollIncrements(int unit, int block) {
if (tableDB == null) return;
tableDB.getVerticalScrollBar().setUnitIncrement(unit);
tableDB.getVerticalScrollBar().setBlockIncrement(block);
}
private JTable createRowHeaderTable(JTable dataTable) { // Make second table for row header
// Debug.println("DBTable setting up RowHeader JTable scrollpane ...");
TableColumnModel tcm = dataTable.getColumnModel();
TableColumnModel tcm2 = new DefaultTableColumnModel();
int nkeyCols = 0;
TableColumn col;
int count = tableModel.getColumnCount();
for (int i = 0; i < count; i++) {
if (tableModel.isColumnAKey(i)) {
col = tcm.getColumn(tcm.getColumnIndex(tableModel.getColumnName(i)));
tcm.removeColumn(col);
tcm2.addColumn(col);
nkeyCols++;
}
}
JTable rowHeaderTable = new JTable(sorter);
rowHeaderTable.setColumnModel(tcm2);
return rowHeaderTable;
}
private void initTableModel(JDBCAdapter model) {
this.tableModel = model;
sorter.setModel(model);
}
public void setTableFont(JTable table, Font font) {
if (font == null) font = DEFAULT_TABLE_FONT;
table.getTableHeader().setFont(font);
table.setFont(font);
}
private void setTableAppearance(JTable table) {
table.setDoubleBuffered(true);
table.setToolTipText(null); // "double-click edits data field only if SELECT FOR UPDATE query"
table.setAutoResizeMode(tableView.AUTO_RESIZE_OFF );
table.getTableHeader().setForeground(Color.red);
table.getTableHeader().setBackground(new Color(.85f,.85f,.85f));
table.getTableHeader().setToolTipText("double-click sorts ascending; shift-double-click sorts descending");
table.setShowGrid(false);
setTableFont(table, font);
}
// setup rowheader selection/color attributes
private void setTableSelectionState(JTable table) {
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionAllowed(true);
table.setCellSelectionEnabled(false);
table.setColumnSelectionAllowed(false);
}
public void clearSelection() {
tableView.clearSelection();
tableRowHead.clearSelection();
}
// Setup format patterns and number renderers
private void setTableColumnRenderersEditors(JTable table, Color defaultColor, Color nonNullColor, Color selectedColor) {
// Debug.println("DBTable setting up MainTable cell renderers/editors...");
String pattern0 = "#0";
FormattedNumberEditor_FW numberEditor0 = new FormattedNumberEditor_FW(pattern0);
EditorMouseListener editorListener = new EditorMouseListener();
numberEditor0.getComponent().addMouseListener(editorListener);
String pattern9 = "#0.000000"; // generic four byte float
FormattedNumberRenderer numberRenderer9 = new FormattedNumberRenderer(pattern9);
FormattedNumberEditor_FW numberEditor9 = new FormattedNumberEditor_FW(pattern9);
numberEditor9.getComponent().addMouseListener(editorListener);
// Assign editor/renderers to table columns
Font tableFont = table.getFont();
FontMetrics fm = table.getFontMetrics(tableFont);
GraphicTimestampTextCellRenderer timestampRenderer =
new GraphicTimestampTextCellRenderer(fm, defaultColor, selectedColor);
GraphicTimestampTextCellRenderer timestampNonNullRenderer =
new GraphicTimestampTextCellRenderer(fm, nonNullColor, selectedColor);
GraphicTextCellRenderer defaultRenderer = new GraphicTextCellRenderer(fm, defaultColor, selectedColor);
GraphicTextCellRenderer defaultNonNullRenderer = new GraphicTextCellRenderer(fm, nonNullColor, selectedColor);
GraphicDateTimeTextCellRenderer datetimeRenderer = new GraphicDateTimeTextCellRenderer(fm, defaultColor, selectedColor);
GraphicDateTimeTextCellRenderer datetimeNonNullRenderer = new GraphicDateTimeTextCellRenderer(fm, nonNullColor, selectedColor);
CalendarDateEditor cdEditor = new CalendarDateEditor(tableFont);
cdEditor.getComponent().addMouseListener(editorListener);
DateTimeEditor dtEditor = new DateTimeEditor(tableFont);
dtEditor.getComponent().addMouseListener(editorListener);
TextCellEditor textEditor = new TextCellEditor(tableFont);
textEditor.getComponent().addMouseListener(editorListener);
GraphicDateTimeTextCellRenderer dtRenderer = null;
GraphicTimestampTextCellRenderer tsRenderer = null;
GraphicTextCellRenderer renderer = null;
TableColumnModel tcm = table.getColumnModel();
for (int i = 0; i<table.getColumnCount(); i++) {
TableColumn column = tcm.getColumn(i);
int index = table.convertColumnIndexToModel(i);
if (tableModel.isColumnNullable(index)) {
renderer = defaultRenderer;
// tsRenderer = timestampNonNullRenderer;
tsRenderer = timestampRenderer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -