1 package org.simantics.spreadsheet.ui;
\r
3 import javax.swing.*;
\r
4 import javax.swing.table.*;
\r
5 import javax.swing.event.MouseInputAdapter;
\r
7 import java.awt.event.MouseEvent;
\r
9 public class TableRowResizer extends MouseInputAdapter
\r
11 public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);
\r
13 private int mouseYOffset, resizingRow;
\r
14 private Cursor otherCursor = resizeCursor;
\r
15 private JTable table;
\r
17 public TableRowResizer(JTable table){
\r
18 this.table = table;
\r
19 table.addMouseListener(this);
\r
20 table.addMouseMotionListener(this);
\r
23 private int getResizingRow(Point p){
\r
24 return getResizingRow(p, table.rowAtPoint(p));
\r
27 private int getResizingRow(Point p, int row){
\r
31 int col = table.columnAtPoint(p);
\r
34 Rectangle r = table.getCellRect(row, col, true);
\r
39 int midPoint = r.y + r.height / 2;
\r
40 int rowIndex = (p.y < midPoint) ? row - 1 : row;
\r
45 public void mousePressed(MouseEvent e){
\r
46 Point p = e.getPoint();
\r
48 resizingRow = getResizingRow(p);
\r
49 mouseYOffset = p.y - table.getRowHeight(resizingRow);
\r
52 private void swapCursor(){
\r
53 Cursor tmp = table.getCursor();
\r
54 table.setCursor(otherCursor);
\r
58 public void mouseMoved(MouseEvent e){
\r
59 if((getResizingRow(e.getPoint())>=0)
\r
60 != (table.getCursor() == resizeCursor)){
\r
65 private boolean dragging = false;
\r
67 public void mouseDragged(MouseEvent e){
\r
68 int mouseY = e.getY();
\r
70 if(resizingRow >= 0){
\r
71 int newHeight = mouseY - mouseYOffset;
\r
73 table.setRowHeight(resizingRow, newHeight);
\r
80 public void mouseReleased(MouseEvent e) {
\r
82 int mouseY = e.getY();
\r
83 int newHeight = mouseY - mouseYOffset;
\r
84 System.out.println(newHeight);
\r
85 onResize(resizingRow, newHeight);
\r
90 public void onResize(int row, int height) {
\r