📄 dbtable.java
字号:
// dtRenderer = datetimeNonNullRenderer;
dtRenderer = datetimeRenderer;
}
else {
renderer = defaultNonNullRenderer;
tsRenderer = timestampNonNullRenderer;
dtRenderer = datetimeNonNullRenderer;
}
String className = table.getColumnClass(i).getName();
if (table.getColumnName(i).equalsIgnoreCase("DATETIME") ) {
column.setCellRenderer(dtRenderer);
column.setCellEditor(dtEditor);
}
else if (className.equals("java.lang.Number") || className.equals("java.lang.Long") ||
className.equals("java.lang.Integer") ) {
column.setCellRenderer(renderer);
column.setCellEditor(numberEditor0);
}
else if (className.equals("java.lang.Double")) {
column.setCellRenderer(renderer);
column.setCellEditor(numberEditor9);
}
else if (className.equals("java.sql.Date") || className.equals("java.sql.Timestamp")) {
column.setCellRenderer(tsRenderer);
column.setCellEditor(cdEditor);
}
else {
column.setCellRenderer(renderer);
column.setCellEditor(textEditor);
}
}
// Debug.println("DBTable finished with renderer setup; final table setup");
}
private void initTableColumnSizes(JTable table) {
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
int colCount = table.getColumnCount();
int checkRows;
int rowCount = table.getRowCount(); // perhaps would be better to used subset for speed?
if (rowCount > 20) checkRows = 20;
else checkRows = rowCount;
for (int i = 0; i < colCount; i++) {
column = table.getColumnModel().getColumn(i);
comp = column.getHeaderRenderer().
getTableCellRendererComponent(
table, column.getHeaderValue(),
false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
int maxCellWidth = 0;
for (int j = rowCount-checkRows; j < rowCount; j++) {
comp = table.getCellRenderer(j,i).
getTableCellRendererComponent(
table, table.getValueAt(j,i),
false, false, j, i);
cellWidth = comp.getPreferredSize().width;
if (cellWidth > maxCellWidth) maxCellWidth = cellWidth;
}
column.setPreferredWidth(Math.max(headerWidth, maxCellWidth));
}
}
// add main table models event listeners
private void addListeners() {
// tableRowHead.getColumnModel().addColumnModelListener(tableView);
// tableView.getColumnModel().addColumnModelListener(tableRowHead);
// sorter.addTableModelListener(tableView);
// sorter.addTableModelListener(tableRowHead);
// Install a mouse listener in the TableHeader as the sorter UI.
sorter.addMouseListenerToHeaderInTable(tableView);
// Install a mouse listener in the TableHeader as the sorter UI.
sorter.addMouseListenerToHeaderInTable(tableRowHead);
tableView.getSelectionModel().addListSelectionListener(new TableEditListener());
// sync scrolling table selection with any row header cell selection change.
tableRowHead.getSelectionModel().addListSelectionListener(new TableRowHeadSelectionListener());
// sync row header selection with any scrolling table cell selection change.
tableView.getSelectionModel().addListSelectionListener(new TableViewSelectionListener());
// click mouse button 1 >= 4 times over tableView cell to cancel cell editing
tableView.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
int clickCount = evt.getClickCount();
int mask = evt.getModifiers();
// Debug.println("TV ClickCount:"+clickCount+" TV Editing? "+tableView.isEditing()+" Button: "+mask);
if ( mask == MouseEvent.BUTTON1_MASK && clickCount >= 4) {
// Debug.println("Canceling edit");
tableView.editingCanceled(new ChangeEvent(tableView));
tableView.repaint();
}
}
});
// shift click mouse button 1 on any tableRowHead cell to resize table row header columns
tableRowHead.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
// Debug.println("TRH ClickCount:" + evt.getClickCount() + " TRH Editing? " + tableRowHead.isEditing());
if ( (evt.getModifiers() == (MouseEvent.BUTTON1_MASK | InputEvent.SHIFT_MASK))
&& evt.getClickCount() >= 1) {
// Debug.println("TRH reset RowHeaderColumnSizes");
resetRowHeader();
}
// else System.out.println("Shift failed");
}
});
}
public boolean resetRowHeader() {
if (tableDB == null) return false;
JTable table = (JTable) tableDB.getRowHeader().getView();
resetRowHeaderColumnSizes(table.getSelectedRow());
table.setPreferredScrollableViewportSize(table.getPreferredSize());
tableDB.setRowHeaderView(table);
tableDB.setCorner(JScrollPane.UPPER_LEFT_CORNER, table.getTableHeader());
tableDB.revalidate();
return true;
}
/*
public boolean resetRowHeader(JTable table, JScrollPane scrollpane) {
if (table == null || scrollpane == null) return false;
table.setPreferredScrollableViewportSize(table.getPreferredSize());
scrollpane.setRowHeaderView(table);
scrollpane.setCorner(JScrollPane.UPPER_LEFT_CORNER, table.getTableHeader());
return true;
}
*/
private boolean resetScrollingTableColumnSizes(int irow) {
return TableCell.resetRowColumnSizes(tableView, irow);
}
private boolean resetRowHeaderColumnSizes(int irow) {
return TableCell.resetRowColumnSizes(tableRowHead, irow);
}
public void stopAllCellEditing() {
if (tableView == null) return;
if (tableView.isEditing()) {
tableView.getCellEditor().stopCellEditing();
}
if (tableRowHead == null) return;
if (tableRowHead.isEditing()) {
tableRowHead.getCellEditor().stopCellEditing();
}
}
// Implementation of Listener interface
// Double click mouse button 2 to stop (end) cell edit
// Double click mouse button 3 to cancel cell edit
private class EditorMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent evt) {
// Debug.println("EML ClickCount:" + evt.getClickCount());
if ( evt.getModifiers() == MouseEvent.BUTTON3_MASK && evt.getClickCount() == 2) {
// Debug.println("EML Canceling edit");
tableView.editingCanceled(new ChangeEvent(tableView));
tableView.repaint();
}
else if ( evt.getModifiers() == MouseEvent.BUTTON2_MASK && evt.getClickCount() == 2) {
// Debug.println("EML Stopping edit");
tableView.editingStopped(new ChangeEvent(tableView));
// tableView.repaint();
}
}
}
private class TableEditListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
/*
Object obj = e.getSource();
// Debug.println("Source: " + e.getSource() );
Component [] cmps = tableView.getComponents();
for (int i = 0; i<cmps.length; i++) {
// Debug.println(cmps[i].getClass().getName());
Component [] cmps2 = ((CellRendererPane)cmps[i]).getComponents();
for (int j = 0; j<cmps2.length; j++) {
// Debug.println(cmps2[i].getClass().getName());
}
}
*/
// if (tableView.isEditing()) tableView.editingCanceled(new ChangeEvent(tableView));
if (tableView.isEditing()) tableView.editingStopped(new ChangeEvent(tableView));
}
}
private class TableRowHeadSelectionListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
int irow1 = tableRowHead.getSelectedRow();
int irow2 = tableView.getSelectedRow();
if (irow1 != irow2 && irow1 >= 0) {
// tableView.clearSelection();
tableView.setRowSelectionInterval(irow1, irow1);
}
}
}
private class TableViewSelectionListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {
int irow1 = tableView.getSelectedRow();
int irow2 = tableRowHead.getSelectedRow();
if (irow1 != irow2 && irow1 >= 0) {
// tableRowHead.clearSelection();
tableRowHead.setRowSelectionInterval(irow1, irow1);
}
}
}
private class ScrollingActionListener implements ActionListener {
public void actionPerformed (ActionEvent evt) {
if (tableDB == null) return;
String str = evt.getActionCommand();
JScrollBar bar = tableDB.getVerticalScrollBar();
if (str.equalsIgnoreCase("U")) {
bar.setValue(bar.getMinimum());
}
else if (str.equalsIgnoreCase("D")) {
bar.setValue(bar.getMaximum());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -