下面列出了怎么用javax.swing.table.JTableHeader的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void mouseClicked(MouseEvent e) {
JTableHeader h = (JTableHeader) e.getSource();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) {
int status = getSortingStatus(column);
if (!e.isControlDown()) {
cancelSorting();
}
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status += e.isShiftDown() ? -1 : 1;
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
if(issueTable != null) {
issueTable.sortOrderChanged();
}
}
}
public void addMouseListenerToHeaderInTable(JTable table) {
final TableSorter sorter = this;
final JTable tableView = table;
tableView.setColumnSelectionAllowed(false);
final MouseAdapter listMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
final TableColumnModel columnModel = tableView.getColumnModel();
final int viewColumn = columnModel.getColumnIndexAtX(e.getX());
final int column = tableView.convertColumnIndexToModel(viewColumn);
if (e.getClickCount() == 1 && column != -1) {
//System.out.println("Sorting ...");
final int shiftPressed = e.getModifiers()&InputEvent.SHIFT_MASK;
final boolean ascending = (shiftPressed == 0);
sorter.sortByColumn(column, ascending);
}
}
};
final JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
}
protected void initTaxonSetsTable(AbstractTableModel tableModel, final String[] columnToolTips) {
taxonSetsTable = new JTable(tableModel) {
//Implement table header tool tips.
protected JTableHeader createDefaultTableHeader() {
return new JTableHeader(columnModel) {
public String getToolTipText(MouseEvent e) {
Point p = e.getPoint();
int index = columnModel.getColumnIndexAtX(p.x);
int realIndex = columnModel.getColumn(index).getModelIndex();
return columnToolTips[realIndex];
}
};
}
};
taxonSetsTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
taxonSetsTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
taxonSetsTableSelectionChanged();
}
});
taxonSetsTable.doLayout();
}
public void addMouseListenerToHeaderInTable(JTable table) {
final TableSorter sorter = this;
final JTable tableView = table;
tableView.setColumnSelectionAllowed(false);
MouseAdapter listMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if (e.getClickCount() == 1 && column != -1) {
System.out.println("Sorting ...");
int shiftPressed = e.getModifiers() & InputEvent.SHIFT_MASK;
boolean ascending = (shiftPressed == 0);
sorter.sortByColumn(column, ascending);
}
}
};
JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
}
@Test
public void testSortNames() {
JTableHeader header = table.getTableHeader();
Rectangle rect = header.getHeaderRect(MemoryMapModel.NAME);
clickMouse(header, 1, rect.x, rect.y, 1, 0);
MemoryBlock[] blocks = memory.getBlocks();
String[] names = new String[blocks.length];
for (int i = 0; i < names.length; i++) {
names[i] = blocks[i].getName();
}
// sort ascending
Arrays.sort(names);
for (int i = names.length - 1; i >= 0; i--) {
assertEquals(names[i], model.getValueAt(i, MemoryMapModel.NAME));
}
}
/**
* This method ensures that the correct tool tip for the current column is delivered.
*/
@Override
protected JTableHeader createDefaultTableHeader() {
JTableHeader header = new JTableHeader(columnModel) {
private static final long serialVersionUID = 1L;
@Override
public String getToolTipText(MouseEvent e) {
java.awt.Point p = e.getPoint();
int index = columnModel.getColumnIndexAtX(p.x);
int realColumnIndex = convertColumnIndexToModel(index);
return DataViewerTable.this.getHeaderToolTipText(realColumnIndex);
}
};
header.putClientProperty(RapidLookTools.PROPERTY_TABLE_HEADER_BACKGROUND, Colors.WHITE);
return header;
}
@Test
public void testSortBlockType() throws Exception {
// add a bit overlay block, live block, and an unitialized block
int transactionID = program.startTransaction("test");
memory.createBitMappedBlock(".Bit", getAddr(0), getAddr(0x01001000), 0x100, false);
memory.createUninitializedBlock(".Uninit", getAddr(0x3000), 0x200, false);
program.endTransaction(transactionID, true);
JTableHeader header = table.getTableHeader();
// ascending
Rectangle rect = header.getHeaderRect(MemoryMapModel.BLOCK_TYPE);
clickMouse(header, 1, rect.x, rect.y, 1, 0);
MemoryBlock[] blocks = memory.getBlocks();
String[] typeNames = new String[blocks.length];
for (int i = 0; i < typeNames.length; i++) {
typeNames[i] = blocks[i].getType().toString();
}
Arrays.sort(typeNames);
for (int i = 0; i < typeNames.length; i++) {
assertEquals(typeNames[i], model.getValueAt(i, MemoryMapModel.BLOCK_TYPE));
}
}
@Override public void mouseClicked(MouseEvent e) {
JTableHeader header = (JTableHeader) e.getComponent();
JTable tbl = header.getTable();
TableColumnModel columnModel = tbl.getColumnModel();
TableModel m = tbl.getModel();
int vci = columnModel.getColumnIndexAtX(e.getX());
int mci = tbl.convertColumnIndexToModel(vci);
if (mci == targetColumnIndex && m.getRowCount() > 0) {
TableColumn column = columnModel.getColumn(vci);
boolean b = column.getHeaderValue() == Status.DESELECTED;
for (int i = 0; i < m.getRowCount(); i++) {
m.setValueAt(b, i, mci);
}
column.setHeaderValue(b ? Status.SELECTED : Status.DESELECTED);
// header.repaint();
}
}
public void addMouseListenerToHeaderInTable(JTable table) {
final TableSorter sorter = this;
final JTable tableView = table;
tableView.setColumnSelectionAllowed(false);
MouseAdapter listMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if (e.getClickCount() == 1 && column != -1) {
System.out.println("Sorting ...");
int shiftPressed = e.getModifiers() & InputEvent.SHIFT_MASK;
boolean ascending = (shiftPressed == 0);
sorter.sortByColumn(column, ascending);
}
}
};
JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
}
/**
* Handle a mouse press event - if the user is NOT resizing a column and NOT dragging a column
* then give visual feedback that the column header has been pressed.
*
* @param e the mouse event.
*/
public void mousePressed(final MouseEvent e) {
final JTableHeader header = (JTableHeader) e.getComponent();
if (header.getResizingColumn() == null) { // resizing takes precedence over sorting
if (header.getDraggedDistance() < 1) { // dragging also takes precedence over sorting
final int columnIndex = header.columnAtPoint(e.getPoint());
final int modelColumnIndex
= header.getTable().convertColumnIndexToModel(columnIndex);
if (this.model.isSortable(modelColumnIndex)) {
this.sortColumnIndex = header.getTable().convertColumnIndexToModel(columnIndex);
this.renderer.setPressedColumn(this.sortColumnIndex);
header.repaint();
if (header.getTable().isEditing()) {
header.getTable().getCellEditor().stopCellEditing();
}
}
else {
this.sortColumnIndex = -1;
}
}
}
}
public static void initializeTable(JTable table)
{
table.setAutoCreateColumnsFromModel(false);
JTableHeader header = table.getTableHeader();
TableColumnModel columns = new DefaultTableColumnModel();
TableCellRenderer headerRenderer = header.getDefaultRenderer();
columns.addColumn(Utilities.createTableColumn(0, "in_level", headerRenderer, false));
columns.addColumn(Utilities.createTableColumn(1, "in_class", headerRenderer, true));
TableColumn remainCol = Utilities.createTableColumn(2, "in_iskRemain", headerRenderer, false);
remainCol.setCellRenderer(new BoldNumberRenderer());
columns.addColumn(remainCol);
columns.addColumn(Utilities.createTableColumn(3, "in_gained", headerRenderer, false));
table.setDefaultRenderer(Integer.class, new TableCellUtilities.AlignRenderer(SwingConstants.CENTER));
table.setColumnModel(columns);
table.setFocusable(false);
header.setReorderingAllowed(false);
header.setResizingAllowed(false);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
boolean timelineColumn = column == table.convertColumnIndexToModel(col);
setVisible(timelineColumn);
Component c = impl.getTableCellRendererComponent(table, timelineColumn ?
" " : value, isSelected, hasFocus, row, col); // NOI18N
if (timelineColumn) {
if (getParent() == null && c instanceof Container) ((Container)c).add(this);
JTableHeader header = table.getTableHeader();
if (painter == null) initStaticUI(c, header);
TableColumn _column = header.getColumnModel().getColumn(col);
setSize(_column.getWidth(), header.getSize().height);
}
return c;
}
@Override public void mouseClicked(MouseEvent e) {
JTableHeader h = (JTableHeader) e.getComponent();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
// ArrayIndexOutOfBoundsException: -1
if (viewColumn < 0) {
return;
}
int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) {
int status = getSortingStatus(column) + (e.isShiftDown() ? -1 : 1);
if (!e.isControlDown()) {
cancelSorting();
}
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
// int d = e.isShiftDown() ? -1 : 1;
// status = status + d;
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
}
}
public void mouseClicked(MouseEvent e) {
JTableHeader h = (JTableHeader) e.getSource();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) {
int status = getSortingStatus(column);
if (!e.isControlDown()) {
cancelSorting();
}
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status = status + (e.isShiftDown() ? -1 : 1);
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
}
}
public static void FitTableColumns(JTable myTable){
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
Enumeration columns = myTable.getColumnModel().getColumns();
while(columns.hasMoreElements()){
TableColumn column = (TableColumn)columns.nextElement();
int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
int width = (int)myTable.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(myTable, column.getIdentifier()
, false, false, -1, col).getPreferredSize().getWidth();
for(int row = 0; row<rowCount; row++){
int preferedWidth = (int)myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable,
myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column); // ���к���Ҫ
column.setWidth(width+myTable.getIntercellSpacing().width);
}
}
public void addMouseListenerToHeaderInTable(JTable table) {
final TableSorter sorter = this;
final JTable tableView = table;
tableView.setColumnSelectionAllowed(false);
MouseAdapter listMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if (e.getClickCount() == 1 && column != -1) {
System.out.println("Sorting ...");
int shiftPressed = e.getModifiers() & InputEvent.SHIFT_MASK;
boolean ascending = (shiftPressed == 0);
sorter.sortByColumn(column, ascending);
}
}
};
JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
}
public void addMouseListenerToHeaderInTable(JTable table) {
final TableSorter sorter = this;
final JTable tableView = table;
tableView.setColumnSelectionAllowed(false);
MouseAdapter listMouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if (e.getClickCount() == 1 && column != -1) {
System.out.println("Sorting ...");
int shiftPressed = e.getModifiers() & InputEvent.SHIFT_MASK;
boolean ascending = (shiftPressed == 0);
sorter.sortByColumn(column, ascending);
}
}
};
JTableHeader th = tableView.getTableHeader();
th.addMouseListener(listMouseListener);
}
@Override public void show(Component c, int x, int y) {
if (c instanceof JTableHeader) {
JTableHeader header = (JTableHeader) c;
header.setDraggedColumn(null); // bookmark_1
// if (header.getDraggedColumn() != null) remain dirty area >>>
header.repaint();
header.getTable().repaint();
// <<<
index = header.columnAtPoint(new Point(x, y));
super.show(c, x, y);
}
}
/**
* Maps {@code JTableHeader.getDraggedColumn()} through queue
*/
public TableColumn getDraggedColumn() {
return (runMapping(new MapAction<TableColumn>("getDraggedColumn") {
@Override
public TableColumn map() {
return ((JTableHeader) getSource()).getDraggedColumn();
}
}));
}
public Dimension getSize(JTableHeader header) {
TableCellRenderer r = header.getDefaultRenderer();
Component c = r.getTableCellRendererComponent(header.getTable(), getHeaderValue(), false, false, -1, -1);
int width = 0;
for (Object obj: list) {
if (obj instanceof TableColumn) {
TableColumn tc = (TableColumn) obj;
width += tc.getWidth();
} else {
width += ((ColumnGroup) obj).getSize(header).width;
}
}
return new Dimension(width, c.getPreferredSize().height);
}
public void mouseClicked (MouseEvent evt) {
Component c = evt.getComponent ();
if (c instanceof JTableHeader) {
JTableHeader h = (JTableHeader)c;
// show/hide additional properties
if (1 == h.columnAtPoint (evt.getPoint ())) {
refreshColumns (true);
}
}
}
private MainPanel() {
super(new BorderLayout());
String[] columnNames = {"Default", "GlyphVector", "JTextArea"};
Object[][] data = {
{STR0, STR1, STR2}, {STR0, STR1, STR2},
{STR3, STR3, STR3}, {STR3, STR3, STR3}
};
TableModel model = new DefaultTableModel(data, columnNames) {
@Override public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTable table = new JTable(model) {
@Override public void updateUI() {
getColumnModel().getColumn(1).setCellRenderer(null);
getColumnModel().getColumn(2).setCellRenderer(null);
super.updateUI();
setRowSelectionAllowed(true);
setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
setRowHeight(50);
getColumnModel().getColumn(1).setCellRenderer(new TestRenderer());
getColumnModel().getColumn(2).setCellRenderer(new TextAreaCellRenderer());
}
};
JTableHeader tableHeader = table.getTableHeader();
tableHeader.setReorderingAllowed(false);
add(new JScrollPane(table));
setPreferredSize(new Dimension(320, 240));
}
/**
* Maps {@code JTableHeader.setUI(TableHeaderUI)} through queue
*/
public void setUI(final TableHeaderUI tableHeaderUI) {
runMapping(new MapVoidAction("setUI") {
@Override
public void map() {
((JTableHeader) getSource()).setUI(tableHeaderUI);
}
});
}
@Override public void show(Component c, int x, int y) {
if (c instanceof JTableHeader) {
JTableHeader header = (JTableHeader) c;
JTable table = header.getTable();
header.setDraggedColumn(null);
header.repaint();
table.repaint();
int i = table.convertColumnIndexToModel(header.columnAtPoint(new Point(x, y)));
if (i >= 0) {
actions.forEach(a -> a.setIndex(i));
super.show(c, x, y);
}
}
}
/**
* Maps {@code JTableHeader.columnMarginChanged(ChangeEvent)} through queue
*/
public void columnMarginChanged(final ChangeEvent changeEvent) {
runMapping(new MapVoidAction("columnMarginChanged") {
@Override
public void map() {
((JTableHeader) getSource()).columnMarginChanged(changeEvent);
}
});
}
public static void main(String[] args) throws Exception {
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
Robot robot = new Robot();
robot.setAutoDelay(20);
final JFrame frame = new JFrame();
frame.setUndecorated(true);
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTableHeader th = new JTableHeader();
th.setColumnModel(new JTable(20, 5).getColumnModel());
th.setUI(new MyTableHeaderUI());
frame.add(th);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
toolkit.realSync();
Point point = frame.getLocationOnScreen();
int shift = 10;
int x = point.x;
int y = point.y + frame.getHeight()/2;
for(int i = -shift; i < frame.getWidth() + 2*shift; i++) {
robot.mouseMove(x++, y);
}
toolkit.realSync();
// 9 is a magic test number
if (MyTableHeaderUI.getTestValue() != 9) {
throw new RuntimeException("Unexpected test number "
+ MyTableHeaderUI.getTestValue());
}
System.out.println("ok");
}
void setModel(TableModel tableModel) {
table.setModel(tableModel);
if (table.getColumnCount() > 0) {
final JTableHeader tableHeader = table.getTableHeader();
final int margin = tableHeader.getColumnModel().getColumnMargin();
final TableCellRenderer renderer = tableHeader.getDefaultRenderer();
final Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn tableColumn = columns.nextElement();
final int width = getColumnMinWith(tableColumn, renderer, margin);
tableColumn.setMinWidth(width);
}
}
}
static ComponentBuilder getBuilder(Instance instance, Heap heap) {
if (DetailsUtils.isSubclassOf(instance, JComboBox.class.getName())) {
return new JComboBoxBuilder(instance, heap);
} else if (DetailsUtils.isSubclassOf(instance, JList.class.getName())) {
return new JListBuilder(instance, heap);
} else if (DetailsUtils.isSubclassOf(instance, JTree.class.getName())) {
return new JTreeBuilder(instance, heap);
} else if (DetailsUtils.isSubclassOf(instance, JTable.class.getName())) {
return new JTableBuilder(instance, heap);
} else if (DetailsUtils.isSubclassOf(instance, JTableHeader.class.getName())) {
return new JTableHeaderBuilder(instance, heap);
}
return null;
}
@Override public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE && e.getColumn() == targetColumnIndex) {
int vci = table.convertColumnIndexToView(targetColumnIndex);
TableColumn column = table.getColumnModel().getColumn(vci);
Object status = column.getHeaderValue();
TableModel m = table.getModel();
if (m instanceof DefaultTableModel && fireUpdateEvent((DefaultTableModel) m, column, status)) {
JTableHeader h = table.getTableHeader();
h.repaint(h.getHeaderRect(vci));
}
}
}
public static void main(String[] args) throws Exception {
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
Robot robot = new Robot();
robot.setAutoDelay(20);
final JFrame frame = new JFrame();
frame.setUndecorated(true);
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTableHeader th = new JTableHeader();
th.setColumnModel(new JTable(20, 5).getColumnModel());
th.setUI(new MyTableHeaderUI());
frame.add(th);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
toolkit.realSync();
Point point = frame.getLocationOnScreen();
int shift = 10;
int x = point.x;
int y = point.y + frame.getHeight()/2;
for(int i = -shift; i < frame.getWidth() + 2*shift; i++) {
robot.mouseMove(x++, y);
}
toolkit.realSync();
// 9 is a magic test number
if (MyTableHeaderUI.getTestValue() != 9) {
throw new RuntimeException("Unexpected test number "
+ MyTableHeaderUI.getTestValue());
}
System.out.println("ok");
}