JSplittPane mauszeiger ändern

Kassel

Aktives Mitglied
Wie kann ich realisieren, wenn ich mit meiner Maus über die Abgrenzung zweier SplittPanes gehe, dass sich der Cursor ( Mauszeiger ) ändert ... halt wie in Excel !

Ich möchte dass der Benutzer sofort sieht ... aha hier kann ich die grösse der splittpanes ändern.

Danke im voraus
 
Meinst du, dass sich der Cursor ändern soll, sobald man über den Divider fährt? Habs mal unter Win7 und Ubuntu getestet mit JDK1.5 und 1.6 ohne irgendwas zu customizen. Hab da schon standardmäßig nen "verschiebe"-pfeil. was meinstn genau?
 
ich habe in meinem programm mehrere SplittPanes ... ich möchte jetzt wenn man mit der Maus drüber fährt das sich so ein RESIZE cursor angezeigt wird jedoch will das nicht so klappen , ich schreib mal hin was ich versucht habe :

Java:
 BasicSplitPaneDivider dividerA = ((BasicSplitPaneUI) jSplitPaneA.getUI()).getDivider();
        dividerA.addMouseListener(new MouseAdapter()
        {
            public void mouseMoved(MouseEvent e)
            {
                setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
                System.out.println("mouseClicked");
            }

            public void mouseExited(MouseEvent e){
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            }
        });

der Cursor bleibt jedoch immer der selbe ( standard ) ... habe es ähnlich bei einer Tabelle gemacht und dort hat es geklappt ... wo ist mein Fehler

jSplitPaneA ist mein SplittPane


EDIT: Es klappt wenn ich statt addMouseListener , addMouseMotionListener benutze ... nur eine Info jedoch wenn ich drüber gehe ( dann ist alles in Ordnung ) wenn ich ziehe auch ( doch wenn ich loslasse ) bleibt er immer noch gleich auch wenn ich weg vom divider gehe ... hmm anscheinen kommt er in mouseExited nicht rein
 
Zuletzt bearbeitet:
hm bei mir klappts. würd mouseexited aber leer lassen, da der cursor sonst wiede rzurück gesetzt wird sobald du den divider bereich verlässt beim verschieben. Denn so wies aussieht, wird das eigentliche divider-component nicht wirklich verschoben. ausserdem würd ich "mouseEntered" statt "mouseMoved" nehmen. Und solltest überprüfen ob es sich um eine horizontale oder vertikale aufteilung handelt. siehs dir an:

Gruß daniel

Java:
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;

public class Main {

    public static void main(String[] args) {
        new Main().run();
    }

    public void run() {
        JFrame f = new JFrame();
        Dimension dim = new Dimension(500, 500);
        f.setPreferredSize(dim);
        f.setSize(dim);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel a = new JPanel();
        a.setBackground(Color.red);

        JPanel b = new JPanel();
        b.setBackground(Color.blue);

        final JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, a, b);
        sp.setDividerLocation(f.getHeight() / 2);
        final BasicSplitPaneDivider div = ((BasicSplitPaneUI) sp.getUI()).getDivider();

        div.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent e) {
                if (sp.getOrientation() == JSplitPane.VERTICAL_SPLIT) {
                    div.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
                } else {
                    div.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
                }
            }
        });

        f.add(sp);
        f.setVisible(true);
    }
}
 
Hi Daniel ... also dass sieht schon nicht schlecht aus , habe auch dass selbe wie du gemacht - jetzt wollte ich nochmal kurz sehen ob es bei funktioniert ( bei meinem Beispiel ) leider funktioniert es nicht ... muss mal schauen wo der fehler liegt - oder er zeigt es nur kurzzeitig an oder gar nicht ... hmm???:L
 
wichtig ist, dass du im listener, in der methode "mouseExited" den cursor NICHT zurücksetzt. sollte es immer noch nicht gehen, tausche mal diesen code-block:
Java:
div.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent e) {
                if (sp.getOrientation() == JSplitPane.VERTICAL_SPLIT) {
                    div.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
                } else {
                    div.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
                }
            }
        });

durch diesen aus:
Java:
if (sp.getOrientation() == JSplitPane.VERTICAL_SPLIT) {
                    div.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
        } else {
            div.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
        }
 
Nur so als Hinweis:
Mit setCursor() kann man generell festlegen, welcher Cursor über welcher Komponente angezeigt wird. D.h. zum einen, dass man aufpassen muss auf welcher Komponente die Methode aufgerufen wird und zum anderen sollte das Konstrukt mittels MouseListener nicht notwendig sein

Siehe dazu API Doku:Component.setCursor(java.awt.Cursor)
 

Zurück
Oben