Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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 :
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
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:
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