MouseEvent weiterreichen

slang

Grünschnabel
Hallo,

mal angenommen ich habe auf einem JPanel zwei JTables übereinander mit einem gewissen Abstand (10 Pixel) angeordnet. Nun starte ich auf JTable A mit einem MouseDragged und möchte dieses ohne Absetzen auf JTable B fortsetzen können. Quasi soll der Benutzer übergangslos von JTable A auf JTable B zeichnen können, aber nicht in den Zwischenraum.

Wie kann ich das MouseDraggedEvent auf JTable A unterbinden, wenn der Zeiger JTable A verläßt?
Und wie kann ich automatisch ein MouseDraggedEvent auf JTable B starten, wenn der Mauszeiger bereits im gedrückten Zustand darüber auftaucht?

Oder gibt es da vielleicht eine ganz andere Herangehensweise?

MfG
 
Hallo Slang,

schau mal hier:

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

import javax.swing.*;

public class DragExtendedExample extends JFrame implements MouseListener,
		MouseMotionListener {

	private Robot r;

	private boolean isDragged = false;

	private BufferedImage _bufferedImage1;

	private BufferedImage _bufferedImage2;

	private JTable t1 = new JTable(14, 5) {
		public void paint(Graphics g) {
			super.paint(g);
			g.drawImage(_bufferedImage1, 0, 0, this);
		}
	};

	private JTable t2 = new JTable(10, 7) {
		public void paint(Graphics g) {
			super.paint(g);
			g.drawImage(_bufferedImage2, 0, 0, this);
		}
	};

	public DragExtendedExample() {
		super("Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);
		this.setSize(500, 300);

		try {
			r = new Robot();
		} catch (AWTException e) {
			e.printStackTrace();
		}

		t1.addMouseListener(this);
		t2.addMouseListener(this);
		t1.addMouseMotionListener(this);
		t2.addMouseMotionListener(this);

		t1.setCellSelectionEnabled(false);
		t2.setCellSelectionEnabled(false);

		this.setLayout(new GridLayout(1, 3));
		this.add(new JScrollPane(t1));
		this.add(new JPanel());
		this.add(new JScrollPane(t2));

		this.setVisible(true);

		_bufferedImage1 = new BufferedImage(t1.getWidth(), t1.getHeight(),
				BufferedImage.TYPE_INT_ARGB);

		_bufferedImage2 = new BufferedImage(t2.getWidth(), t2.getHeight(),
				BufferedImage.TYPE_INT_ARGB);
	}

	public static void main(String[] args) {
		new DragExtendedExample();
	}

	public void mouseClicked(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
	}

	public void mouseReleased(MouseEvent e) {
		isDragged = false;
	}

	public void mouseEntered(MouseEvent e) {
		if (isDragged) {
			r.mouseRelease(InputEvent.BUTTON1_MASK);
			r.mousePress(InputEvent.BUTTON1_MASK);
		}
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mouseDragged(MouseEvent e) {
		isDragged = true;
		Graphics2D g;
		if (e.getSource() == t1)
			g = (Graphics2D) _bufferedImage1.getGraphics();
		else
			g = (Graphics2D) _bufferedImage2.getGraphics();
		g.setColor(Color.BLUE);
		g.fillOval(e.getX(), e.getY(), 5, 5);
		e.getComponent().repaint();
	}

	public void mouseMoved(MouseEvent e) {
	}
}


Vg Erdal
 
Zurück