J'ai besoin de mon curseur pour changer lorsque je passe la souris sur le diviseur JSplitPane
. Ceci est purement pour une facilité d'utilisation améliorée. J'ai découvert deux méthodes pour accomplir ceci. Code ci-dessousChanger le curseur en survolant JSplitPane divider
Méthode 01
BasicSplitPaneUI basicSplitPaneUI = (BasicSplitPaneUI)splitPane.getUI();
BasicSplitPaneDivider divider = basicSplitPaneUI.getDivider();
divider.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
Méthode 02
Component divider = splitPane.getComponent(2);
divider.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
Mon problème est, ces deux méthodes fonctionnent comme prévu si le récipient supérieur du JSplitPane
est un JFrame
ou un JWindow
. Pour tester, j'ai écrit un petit morceau de code où le JSplitPane
est ajouté à un JPanel
qui est ensuite ajouté à un JFrame
. Le curseur change comme prévu lorsque vous passez la souris sur le diviseur.
Mais je développe un plugin Tool Window
pour IntelliJ et là, le JSplitPane
(contenu dans un JPanel
) est ajouté à un récipient ToolWindow
. Dans ce cas, le curseur reste le même lorsque je survole le diviseur. Ci-dessous est un code de test que j'ai écrit pour simuler les scénarios ci-dessus.
Case 01
public class Main {
public static void main(String args[]){
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
//PanelWithSplitPane extends JPanel. Builds the JSplitPane
PanelWithSplitPane viewer = new PanelWithSplitPane();
f.add(viewer, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
}
sortie: Fonctionne comme prévu. Le curseur change lorsque planait au-dessus du diviseur
Case 02: le plugin IntelliJ
note: Ceci est un projet de plugin IntelliJ, où une extension toolWindow
est spécifiée dans un fichier plugin.xml. Fondamentalement, la méthode createToolWindowContent
est exécutée lorsque l'outil Window est ouvert dans l'EDI. La vue et toute autre interaction de l'utilisateur sont traitées à partir d'ici.
public class TestPane implements ToolWindowFactory {
//this method gets called when the toolWindow is opened in the IDE
@Override
public void createToolWindowContent(Project project, ToolWindow toolWindow) {
PanelWithSplitPane viewer = new PanelWithSplitPane();
toolWindow.getComponent().add(panel);
}
}
sortie: Ne fonctionne pas comme prévu.Le curseur reste le même lorsque plané au-dessus du diviseur
code PanelWithSplitPane
public class PanelWithSplitPane extends JPanel {
public PanelWithSplitPane() {
this.setLayout(new BorderLayout());
JSplitPane splitPane = new javax.swing.JSplitPane();
splitPane.setBorder(null);
splitPane.setDividerLocation(1300);
splitPane.setDividerSize(6);
splitPane.setContinuousLayout(true);
splitPane.setOneTouchExpandable(true);
BasicSplitPaneUI basicSplitPaneUI = (BasicSplitPaneUI)splitPane.getUI();
BasicSplitPaneDivider divider = basicSplitPaneUI.getDivider();
divider.setCursor(new Cursor(Cursor.HAND_CURSOR));
this.add(splitPane);
}
}
Merci pour votre réponse. Mais cela ne fonctionne pas non plus. Les deux méthodes 'mouseEntered' et' mouseExited' sont appelées correctement, mais la méthode 'setCursor' ne semble pas fonctionner lorsque le conteneur de niveau supérieur n'est pas un JFrame ou un JWindow. – fsociety
aucune idée sur votre problème de Win7, pour une meilleure aide plus tôt post un SSCCE/MCVE, court, runnable, compilable, car en appelant Cursor.DEFAULT_CURSOR de mouseExited tous les curseurs sont (dans Win10, Java8) correctement peint (DEFAULT_CURSOR pour tous Rectangle dans ContentPane, et il change à E_RESIZE_CURSOR si je suis hover_over ses frontières), vraiment aucune idée de votre problème avec, parce que cette fonctionnalité fonctionne dans WINXP/Win7, Win8 et WIn10 tout à fait correctement – mKorbel
Le code que vous publiez fonctionne très bien. Le problème est avec mon plugin fenêtre intellij outil. Pour une raison quelconque, la méthode 'setCursor' ne fonctionne pas lorsque j'ajoute le' JPanel' avec le 'JSplitPane' au conteneur' ToolWindow'. J'ai trouvé un moyen de le faire fonctionner. voir ma réponse – fsociety