У меня есть JTable, на котором я хочу настроить высоту строки с помощью курсора мыши (например, в excel). Не могли бы вы предложить, как мне решить эту задачу.Настройка отдельной высоты строки с помощью курсора на JTable
2
A
ответ
1
Если JTable не поддерживает его изначально, вам не повезло, так как эта задача будет довольно сложной в управлении.
Что вы на самом деле нужно сделать, это написать один или два слушателя:
MouseMotionListener
, который способен отслеживать перетаскиванием мышиMouseListener
, который способен отслеживать все другие действия мыши
Начиная с этого вы должны понимать, когда пользователь начинает перетаскивать курсор мыши на линию разделения строк, а затем использовать правильный метод: setRowHeight(int,int)
(для конкретной строки) или setRowHeight(int)
(для всех строк).
Это будет непросто, и вам предлагается не пытаться делать это динамически (высота обновляется, когда мышь перемещается).
2
Найдено этот код на форумах ВС/Oracle долгое время назад ...
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.MouseInputAdapter;
import java.awt.*;
import java.awt.event.MouseEvent;
public class TableRowResizer extends MouseInputAdapter
{
public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);
private int mouseYOffset, resizingRow;
private Cursor otherCursor = resizeCursor;
private JTable table;
public TableRowResizer(JTable table){
this.table = table;
table.addMouseListener(this);
table.addMouseMotionListener(this);
}
private int getResizingRow(Point p){
return getResizingRow(p, table.rowAtPoint(p));
}
private int getResizingRow(Point p, int row){
if(row == -1){
return -1;
}
int col = table.columnAtPoint(p);
if(col==-1)
return -1;
Rectangle r = table.getCellRect(row, col, true);
r.grow(0, -3);
if(r.contains(p))
return -1;
int midPoint = r.y + r.height/2;
int rowIndex = (p.y < midPoint) ? row - 1 : row;
return rowIndex;
}
public void mousePressed(MouseEvent e){
Point p = e.getPoint();
resizingRow = getResizingRow(p);
mouseYOffset = p.y - table.getRowHeight(resizingRow);
}
private void swapCursor(){
Cursor tmp = table.getCursor();
table.setCursor(otherCursor);
otherCursor = tmp;
}
public void mouseMoved(MouseEvent e){
if((getResizingRow(e.getPoint())>=0)
!= (table.getCursor() == resizeCursor)){
swapCursor();
}
}
public void mouseDragged(MouseEvent e){
int mouseY = e.getY();
if(resizingRow >= 0){
int newHeight = mouseY - mouseYOffset;
if(newHeight > 0)
table.setRowHeight(resizingRow, newHeight);
}
}
}
Смежные вопросы
- 1. Автоматическая настройка высоты строк в JTable
- 2. JTable высоты
- 3. Настройка текущей строки курсора на .NET TextBox
- 4. Установка высоты строки в JTable в java
- 5. Изменение размера высоты JTable
- 6. Настройка высоты UIView на основе высоты UIScrollView
- 7. Настройка высоты для одной отдельной ячейки в Xcode swift
- 8. Настройка высоты линии на jsTree?
- 9. Настройка высоты с помощью jQuery без обновления
- 10. Настройка ширины и высоты с помощью CSS
- 11. Автоматическая настройка высоты строки в HTML
- 12. Настройка jTable
- 13. отдельной строки на основе
- 14. Настройка высоты строки jqGrid ниже 23px
- 15. Автоматическая настройка высоты строки в Excel
- 16. Настройка динамической высоты строки в xsl fo
- 17. Настройка высоты строки динамической сетки JavaFX
- 18. JTable регулировки ширины столбца или высоты
- 19. Настройка высоты строки управления сеткой Kendo?
- 20. JTable изменение мыши метод курсора
- 21. Настройка высоты строки на матричном контроле в SSRS 2005
- 22. Добавление строки в JTable с помощью JCreator
- 23. Настройка размера шрифта на основе высоты строки в NSTextField
- 24. Настройка цвета в строке Jtable
- 25. Настройка динамической высоты UITableViewCell
- 26. Настройка Swing JTable для фильтрации/поиска
- 27. Настройка высоты div в HTML с помощью CSS
- 28. Сгенерировать пустые строки с помощью курсора
- 29. Правильный способ установки ширины столбца и высоты строки JTable
- 30. Настройка высоты с помощью css и jquery, css получает приоритет
Это старый ответ, но я могу подтвердить, что действительно работает отлично. Спасибо. – 2014-01-07 06:39:50