summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/ResizeColumnListener.java
blob: 104885fe9f1b97aeae3d9f8bf26b94cf2188f85f (plain) (blame)
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
package org.openslx.dozmod.gui.helper;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class ResizeColumnListener implements MouseListener {
	private static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);

	private MouseListener uiListener;
	private JTableHeader header;
	private TableColumnAdjuster tca;

	public ResizeColumnListener(JTable table) {
		header = table.getTableHeader();
		tca = new TableColumnAdjuster(table);

		MouseListener[] listeners = header.getMouseListeners();

		for (MouseListener ml : listeners) {
			String className = ml.getClass().toString();

			if (className.contains("BasicTableHeaderUI")) {
				uiListener = ml;
				header.removeMouseListener(ml);
				header.addMouseListener(this);
			}
		}
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		if (header.getCursor() != resizeCursor) {
			uiListener.mouseClicked(e);
			return;
		}

		// Handle the double click event to resize the column
		// Note: The last 3 pixels + 3 pixels of next column are for resizing,
		// so we need to adjust the mouse point to get the actual column.

		if (e.getClickCount() == 2) {
			Point p = e.getPoint();
			p.x -= 3;
			int column = header.columnAtPoint(p);
			tca.adjustColumn(column);

			// Generate event to reset the cursor
			header.dispatchEvent(new MouseEvent(header, MouseEvent.MOUSE_MOVED, e.getWhen(), e.getModifiers(), e.getX(),
					e.getY(), 0, false));
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		uiListener.mouseEntered(e);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		uiListener.mouseExited(e);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		uiListener.mousePressed(e);
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		uiListener.mouseReleased(e);
	}
}