|
17.01.2007, 16:08:51
#34262207
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
Участник
Сообщения: 1 280
Рейтинг:
0
/ 0
|
|
|
|
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138.
public class TableColumnResizer extends MouseInputAdapter{
public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
private int mouseXOffset;
private Cursor otherCursor = resizeCursor;
private JTable table;
public TableColumnResizer(JTable table){
this .table = table;
table.addMouseListener( this );
table.addMouseMotionListener( this );
}
private boolean canResize(TableColumn column){
return column != null
&& table.getTableHeader().getResizingAllowed()
&& column.getResizable();
}
private TableColumn getResizingColumn(Point p){
return getResizingColumn(p, table.columnAtPoint(p));
}
private TableColumn getResizingColumn(Point p, int column){
if (column == - 1 ){
return null ;
}
int row = table.rowAtPoint(p);
if (row==- 1 )
return null ;
Rectangle r = table.getCellRect(row, column, true);
r.grow( - 3 , 0 );
if (r.contains(p))
return null ;
int midPoint = r.x + r.width / 2 ;
int columnIndex;
if (table.getTableHeader().getComponentOrientation().isLeftToRight())
columnIndex = (p.x < midPoint) ? column - 1 : column;
else
columnIndex = (p.x < midPoint) ? column : column - 1 ;
if (columnIndex == - 1 )
return null ;
return table.getTableHeader().getColumnModel().getColumn(columnIndex);
}
public void mousePressed(MouseEvent e){
table.getTableHeader().setDraggedColumn( null );
table.getTableHeader().setResizingColumn( null );
table.getTableHeader().setDraggedDistance( 0 );
Point p = e.getPoint();
int index = table.columnAtPoint(p);
if (index==- 1 )
return ;
TableColumn resizingColumn = getResizingColumn(p, index);
if (!canResize(resizingColumn))
return ;
table.getTableHeader().setResizingColumn(resizingColumn);
if (table.getTableHeader().getComponentOrientation().isLeftToRight())
mouseXOffset = p.x - resizingColumn.getWidth();
else
mouseXOffset = p.x + resizingColumn.getWidth();
}
private void swapCursor(){
Cursor tmp = table.getCursor();
table.setCursor(otherCursor);
otherCursor = tmp;
}
public void mouseMoved(MouseEvent e){
if (canResize(getResizingColumn(e.getPoint()))
!= (table.getCursor() == resizeCursor)){
swapCursor();
}
}
public void mouseDragged(MouseEvent e){
int mouseX = e.getX();
TableColumn resizingColumn = table.getTableHeader().getResizingColumn();
boolean headerLeftToRight =
table.getTableHeader().getComponentOrientation().isLeftToRight();
if (resizingColumn != null ){
int oldWidth = resizingColumn.getWidth();
int newWidth;
if (headerLeftToRight){
newWidth = mouseX - mouseXOffset;
} else {
newWidth = mouseXOffset - mouseX;
}
resizingColumn.setWidth(newWidth);
Container container;
if ((table.getTableHeader().getParent() == null )
|| ((container = table.getTableHeader().getParent().getParent()) == null )
|| !(container instanceof JScrollPane)){
return ;
}
if (!container.getComponentOrientation().isLeftToRight()
&& !headerLeftToRight){
if (table != null ){
JViewport viewport = ((JScrollPane)container).getViewport();
int viewportWidth = viewport.getWidth();
int diff = newWidth - oldWidth;
int newHeaderWidth = table.getWidth() + diff;
Dimension tableSize = table.getSize();
tableSize.width += diff;
table.setSize(tableSize);
if ((newHeaderWidth >= viewportWidth)
&& (table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF)){
Point p = viewport.getViewPosition();
p.x =
Math.max( 0 , Math.min(newHeaderWidth - viewportWidth, p.x + diff));
viewport.setViewPosition(p);
mouseXOffset += diff;
}
}
}
}
}
public void mouseReleased(MouseEvent e){
table.getTableHeader().setResizingColumn( null );
table.getTableHeader().setDraggedColumn( null );
}
}
а потом делаешь так для своей ДЖИТеэйбл:
new TableColumnResizer(МайДЖИТеэйбл);
|
|
|