Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.141.105] |
|
Сообщ.
#1
,
|
|
|
Есть код:
void myTableHeader_mouseEntered(MouseEvent e) { TableColumnModel myColumnModel; TableModel myTableModel = jTable1.getModel(); TableColumn myColumn2; headerColor = myTableHeader.getBackground(); Point mousePoint = e.getPoint(); int x = mousePoint.x; int y = mousePoint.y; Rectangle columnRectangle = myTableHeader.getHeaderRect(1); int rx = columnRectangle.x; int ry = columnRectangle.y; int rwidth = columnRectangle.width; int rheight = columnRectangle.height; if ((rx<x)&&(x<(rx+rwidth))&&(ry<y)&&(y<(ry+rheight))) { myColumn2 = jTable1.getColumnModel().getColumn(1); myColumn2.setHeaderValue("<html><body bgcolor=\"#FF0000\">Дата / время (ДМВ)</body></html>"); int k2 = 0; } } void myTableHeader_mouseExited(MouseEvent e) { myTableHeader.setBackground(headerColor); TableColumn myColumn2 = jTable1.getColumnModel().getColumn(1); myColumn2.setHeaderValue("Дата / время (ДМВ)"); } Смысл функции myTableHeader_mouseEntered в том, что когда стрелка мыши попадает в соответствующий столбец заголовка (в моём случае -- столбец номер 1, которому соответствует прямоугольник columnRectangle), то происходит изменение текста заголовка этого столбца. В отладчике это работает. Но когда я перехожу на обычное исполнение этой программы, то там изменение надписи почему-то не работает -- надпись остаётся такой же, какой и была, при попадании курсора мыши на соответствующий столбец заголовка. В чём причина этого? |
Сообщ.
#2
,
|
|
|
Вот так вроде бы работает:
public class CheckTable extends JFrame implements MouseMotionListener{ Color headerColor; JTable table; CheckTable(){ super(); setDefaultCloseOperation(EXIT_ON_CLOSE); table=new JTable(2,4); //table.addMouseListener(this); table.addMouseMotionListener(this); this.setFocusable(false); this.add(new JScrollPane(table)); pack(); setSize(300,300); setVisible(true); } public static void main(String [] args){ new CheckTable(); } public void mouseDragged(MouseEvent e) { // } public void mouseMoved(MouseEvent e) { TableColumn myColumn2; JTableHeader myTableHeader=table.getTableHeader(); headerColor = myTableHeader.getBackground(); Point mousePoint = e.getPoint(); int x = mousePoint.x; int y = mousePoint.y; Rectangle columnRectangle = myTableHeader.getHeaderRect(1); int rx = columnRectangle.x; int ry = columnRectangle.y; int rwidth = columnRectangle.width; int rheight = columnRectangle.height; myColumn2 = table.getColumnModel().getColumn(1); if ((rx<x)&&(x<(rx+rwidth))&&(ry<y)&&(y<(ry+rheight))) { myColumn2.setHeaderValue("<html><body bgcolor=\"#FF0000\">Дата / время (ДМВ)</body></html>"); }else{ myTableHeader.setBackground(headerColor); myColumn2.setHeaderValue("Дата / время (ДМВ)"); } myTableHeader.repaint(); int k2 = 0; } } Только с границами там что-то напутано: при наведении на первую ячейку столбца происходит изменение заголовка. Надо не забывать repaint() применять для отрисовки. К тому же если нужен не весь столбец, а только Header, то можно прикручивать MouseMotionListener только к нему |