📄 catalogtable.java
字号:
tableView.setSelectionBackground(Color.white);
// assign rowheader renderer (string type)
// Debug.println("CatalogTable setting up RowHeader cell renderers/editors...");
for (int i = 0; i<tableRowHead.getColumnCount(); i++) {
TableColumn tc = tcm2.getColumn(i);
tc.setHeaderRenderer(new TableHeaderRenderer());
Class tmpclass = tableRowHead.getColumnClass(i);
if (tmpclass.getName().equals("java.lang.String")) {
tc.setCellRenderer(new TextCellRenderer(font));
TextCellEditor textEditor = new TextCellEditor(font);
textEditor.getComponent().addMouseListener(new EditorMouseListener());
tc.setCellEditor(textEditor);
}
else if (tmpclass.getName().equals("java.lang.Double")) {
int indexViewToModel = tableRowHead.convertColumnIndexToModel(i);
int fractionWidth = tableModel.getColumnFractionDigits(indexViewToModel);
if (fractionWidth >= 0) {
if (fractionWidth > MAX_FRACTION_ELEMENTS - 1 ) fractionWidth = MAX_FRACTION_ELEMENTS - 1;
pattern = getNumberFormatPattern(fractionWidth);
if (numberRenderer[fractionWidth] == null)
numberRenderer[fractionWidth] = new FormattedNumberRenderer(pattern);
if (numberEditor[fractionWidth] == null) {
numberEditor[fractionWidth] = new FormattedNumberEditor_FW(pattern);
numberEditor[fractionWidth].getComponent().addMouseListener(new EditorMouseListener());
}
tc.setCellEditor(numberEditor[fractionWidth]);
tc.setCellRenderer(numberRenderer[fractionWidth]);
}
else if (fractionWidth < 0 ) {
tc.setCellEditor(numberEditor9);
tc.setCellRenderer(numberRenderer9);
}
}
else if (tmpclass.getName().equals("java.lang.Integer") || tmpclass.getName().equals("java.lang.Number") ||
tmpclass.getName().equals("java.lang.Long") ) {
pattern = getNumberFormatPattern(0);
if (numberRenderer[0] == null) numberRenderer[0] = new FormattedNumberRenderer(pattern);
if (numberEditor[0] == null) {
numberEditor[0] = new FormattedNumberEditor_FW(pattern);
numberEditor[0].getComponent().addMouseListener(new EditorMouseListener());
}
tc.setCellEditor(numberEditor[0]);
tc.setCellRenderer(numberRenderer[0]);
// tc.setCellEditor(numberEditor7);
// tc.setCellRenderer(numberRenderer7);
}
}
for (int i = 0; i<tableRowHead.getColumnCount(); i++) {
String name = tableRowHead.getColumnName(i);
if (name.equalsIgnoreCase("datetime")) {
TableColumn tc = tcm2.getColumn(i);
tc.setCellRenderer(dtRenderer);
tc.setCellEditor(dtEditor);
}
// implemented code below as an example of renderering "deleted" solution ids differently.
else if (name.equalsIgnoreCase("id")) {
DeletedRowCellNumberRenderer render = new DeletedRowCellNumberRenderer(tableModel);
render.setDefaultBackgroundColor(Color.yellow);
tcm2.getColumn(i).setCellRenderer(render);
}
}
tableRowHead.setDefaultRenderer(java.sql.Date.class, cdRenderer);
// end of renderer removal test aww
// size rowheader columns
// Debug.println("CatalogTable sizing RowHead columns");
initColumnSizes(tableRowHead);
// Debug.println("CatalogTable finished with renderer setup; final table setup");
// setup rowheader selection/color attributes
tableRowHead.setCellSelectionEnabled(false);
tableRowHead.setRowSelectionAllowed(true);
tableRowHead.setColumnSelectionAllowed(false);
tableRowHead.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
tableRowHead.setForeground(Color.black);
tableRowHead.setBackground(Color.yellow);
tableRowHead.setSelectionForeground(Color.blue);
tableRowHead.setSelectionBackground(Color.orange);
// tableRowHead.setToolTipText("Key fields highlighted yellow (shift-click over cell resizes rowheader width)");
// size rowheader and put in scrollpane
JScrollPane scrollpane = null;
tableRowHead.setPreferredScrollableViewportSize(tableRowHead.getPreferredSize());
if (tableView.getColumnCount() <= 0) {
System.out.println("CatalogTable: tableView has no columns");
scrollpane = new JScrollPane(tableRowHead);
}
else scrollpane = new JScrollPane(tableView);
scrollpane.setRowHeaderView(tableRowHead);
scrollpane.setCorner(JScrollPane.UPPER_LEFT_CORNER, tableRowHead.getTableHeader());
// add main table models event listeners
tcm2.addColumnModelListener(tableView);
// tcm2.getSelectionModel().addListSelectionListener(new TableEditListener());
// tcm.getSelectionModel().addListSelectionListener(new TableEditListener());
sorter.addTableModelListener(tableView);
sorter.addMouseListenerToHeaderInTable(tableView); // Install a mouse listener in the TableHeader as the sorter UI.
// sync rowheader selection with main table cell selection
tableView.getSelectionModel().addListSelectionListener(new TableEditListener());
tableRowHead.getSelectionModel().addListSelectionListener(new TableRowHeadSelectionListener());
tableView.getSelectionModel().addListSelectionListener(new TableViewSelectionListener());
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) {
System.out.println("Canceling edit");
tableView.editingCanceled(new ChangeEvent(tableView));
tableView.repaint();
}
}
});
// aww test of mouse clicks
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) {
resetRowColumnSizes(tableRowHead, tableRowHead.getSelectedRow());
resetRowHeader(tableRowHead, tableDB);
tableDB.revalidate();
}
// else System.out.println("Shift failed");
}
});
tableView.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
// Debug.println("TV ClickCount:" + evt.getClickCount() + " TV Editing? " + tableView.isEditing());
if ( (evt.getModifiers() == (MouseEvent.BUTTON3_MASK | InputEvent.SHIFT_MASK))
&& evt.getClickCount() >= 1) {
resetRowColumnSizes(tableView, tableView.getSelectedRow());
// resetRowHeader(tableRowHead, tableDB);
tableView.revalidate();
tableDB.revalidate();
}
// else System.out.println("Shift failed");
}
});
// end of mouse click test aww
// add rowheader models event listeners
tcm.addColumnModelListener(tableRowHead);
sorter.addTableModelListener(tableRowHead);
sorter.addMouseListenerToHeaderInTable(tableRowHead);
// size the table viewport
tableView.setPreferredScrollableViewportSize(tableView.getPreferredSize());
tableDB = scrollpane;
return scrollpane;
} // end of createTable() method
public JScrollPane createTable(int fontSize) {
if (fontSize > 0) this.fontSize = fontSize;
return createTable();
}
public JScrollPane createTable(Font font) {
if (font != null) this.font = font;
return createTable();
}
public static String getNumberFormatPattern(int scale) {
StringBuffer pattern = new StringBuffer("#0");
if (scale > 0) {
char [] frac = new char[scale];
Arrays.fill(frac, '0');
pattern.append('.');
pattern.append(frac);
}
return pattern.toString();
}
protected void initColumnSizes(JTable table) {
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
int colCount = table.getColumnCount();
int rowCount = table.getRowCount();
// perhaps would be better to used subset for speed?
int checkRows;
if (rowCount > 200) checkRows = 200;
else checkRows = rowCount;
// int padding = 0;
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;
/*
Insets insets = ((Container) comp).getInsets();
padding = insets.left + insets.right;
*/
if (cellWidth > maxCellWidth) maxCellWidth = cellWidth;
}
column.setPreferredWidth(Math.max(headerWidth, maxCellWidth) + COLUMN_WIDTH_PADDING);
}
}
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;
}
public boolean resetRowColumnSizes(JTable table, int irow) {
if (table == null) return false;
int rowCount = table.getRowCount();
if (irow < 0 || irow > rowCount) return false;
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
int colCount = table.getColumnCount();
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;
comp = table.getCellRenderer(irow,i).
getTableCellRendererComponent(
table, table.getValueAt(irow,i),
false, false, irow, i);
cellWidth = comp.getPreferredSize().width;
if (cellWidth > maxCellWidth) maxCellWidth = cellWidth;
column.setPreferredWidth(Math.max(headerWidth, maxCellWidth) + COLUMN_WIDTH_PADDING);
}
return true;
}
public int getRenderedCellWidth(JTable table, int irow, int icol) {
if (table == null) return -1;
int rowCount = table.getRowCount();
if (irow < 0 || irow > rowCount) return -1;
int colCount = table.getColumnCount();
if (icol < 0 || icol > colCount) return -1;
TableColumn column = table.getColumnModel().getColumn(icol);
if (column == null ) return -1;
Component comp = table.getCellRenderer(irow,icol).
getTableCellRendererComponent(
table, table.getValueAt(irow,icol),
false, false, irow, icol);
return comp.getPreferredSize().width + COLUMN_WIDTH_PADDING;
}
public int getPreferredRowWidth(JTable table, int irow) {
if (table == null) return -1;
int rowCount = table.getRowCount();
if (irow < 0 || irow > rowCount) return -1;
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
int maxWidth = 0;
int colCount = table.getColumnCount();
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;
comp = table.getCellRenderer(irow,i).
getTableCellRendererComponent(
table, table.getValueAt(irow,i),
false, false, irow, i);
cellWidth = comp.getPreferredSize().width;
if (cellWidth > maxCellWidth) maxCellWidth = cellWidth;
maxWidth += Math.max(headerWidth, maxCellWidth) + COLUMN_WIDTH_PADDING;
}
return maxWidth;
}
public int updateDB() {
return tableModel.updateDB();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -