Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  Java

  design perso pour JSplitPane [avec soluce]

Bas de page
Auteur Sujet :

design perso pour JSplitPane [avec soluce]

n°5271
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 06-10-2003 à 14:18:09  
 

Salut!
 
Voilà voilà, je suis confronté au problème suivant :
Je cherche à donner un design perso au divider (la barre de division) d'un JSplitPane...
 
J'ai tenté de dériver la classe BasicSplitPaneUI pour donner mon style au SplitPane, en voici le code :
 

Code :
  1. import javax.swing.*;
  2. import javax.swing.border.*;
  3. import javax.swing.plaf.basic.BasicSplitPaneUI;
  4. import java.awt.*;
  5. import javax.swing.plaf.basic.BasicSplitPaneDivider;
  6. public class mySplitPane extends JSplitPane {
  7.   private Border splitPaneBorder = BorderFactory.createMatteBorder(2,5,2,5,new Color(37,82,130));
  8.   public mySplitPane(Component leftComponent, Component rightComponent, ONIM parentObject) {
  9.     this.add(leftComponent, JSplitPane.LEFT);
  10.     this.add(rightComponent, JSplitPane.RIGHT);
  11.     this.setBackground(new Color(37,82,130));
  12.     this.setForeground(Color.white);
  13.     this.setBorder(splitPaneBorder);
  14.     this.setMinimumSize(new Dimension(300, 200));
  15.     this.setContinuousLayout(false);
  16.     this.setUI(new mySplitPaneUI());
  17.     this.setDividerSize(10);
  18.     this.setDividerLocation(200);
  19.   }
  20.   private class mySplitPaneUI extends BasicSplitPaneUI {
  21.     Border dividerBorder = BorderFactory.createLineBorder(new Color(37,82,130),5);
  22.     public mySplitPaneUI() {
  23.       this.setContinuousLayout(false);
  24.       JPanel dividerLike = new JPanel();
  25.       dividerLike.setOpaque(true);
  26.       dividerLike.setBackground(new Color(37,82,130));
  27.       dividerLike.setBorder(dividerBorder);
  28.       this.setNonContinuousLayoutDivider(dividerLike);
  29.     }
  30.   }
  31. }


 
Mais, je n'obtiens pas le résultat escompté! Je veux un divider tout plat, de la couleur que je veux etc... Pour le moment, j'obtiens bien la couleur de background, mais je n'ai aucune prise sur la bordure du divider, je n'arrive pas à "l'effacer".
J'ai bien tenté de dériver, en plus, la classe BasicSplitPaneDivider, mais là, je n'y suis carrément pas arrivé :(
Je me dis qu'il doit falloir surcharger la méthode BasicSplitPaneUI.paint(...), mais je manque d'expérience de ce coté là...
 
Quelqu'un peut-il m'aider ???
 
Siou plait  :jap:


Message édité par ollone le 08-10-2003 à 17:57:44

---------------
C'est naturel que les filles soient plus belles, et les garçons plus cons ^^ [un peu bonobo sur les bords]
mood
Pub
Posté le 06-10-2003 à 14:18:09  
 

n°5285
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 08-10-2003 à 17:44:03  
 

Bon, je crois avoir trouver une bonne solution, tout seul  :sol: Yeah!
 
Voilà, au moment du lancement de l'application et dans le cas d'une interface homme/machine de type Swing, il est de coutume d'initialiser le Look & Feel de l'interface.
A cette occasion, on peut récupérer la table des valeurs par défaut du Look & Feel choisi ou par défaut.
Et c'est là que nous intervenons!
 

Code :
  1. // On récupère le Look & Feel par défaut
  2. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  3. // On récupère la table des constantes du L&F
  4. UIDefaults uidef = UIManager.getDefaults();
  5. // On set qqes paramètres graphiques
  6. uidef.put("SplitPaneDivider.border", BorderFactory.createLineBorder(new ColorUIResource(37,82,130),1));
  7. uidef.put("SplitPane.background", new ColorUIResource(37,82,130));
  8. uidef.put("SplitPane.dividerSize", new Integer(10));


 
Fini!  :D  
En fait ce n'était pas terrible ;)
 
ps: afin de connaitre l'ensemble des clés contenues dans la table des constantes graphiques, vous pouvez exécuter cette 'routine' et toutes les obtenir :

Code :
  1. UIDefaults uiDefaults = UIManager.getDefaults();
  2. Enumeration enum = uiDefaults.keys();
  3. while (enum.hasMoreElements()) {
  4.     Object key = enum.nextElement();
  5.     Object val = uiDefaults.get(key);
  6.     System.out.println("[" + key.toString() + "]:[" +
  7.         (null != val ? val.toString() : "(null)" ) +
  8.         "]" );
  9.     }


ou bien exécuter l'application qui accompagne l'article de Borland à cette adresse : http://community.borland.com/artic [...] 91,00.html
 
J'espère que tout cela pourra vous aider un jour  :)


---------------
C'est naturel que les filles soient plus belles, et les garçons plus cons ^^ [un peu bonobo sur les bords]
n°5294
lukefab
meuh
Profil : Habitué
Posté le 08-10-2003 à 19:55:03  
 

merci, ca peut aider un jour.


---------------
Opera 8.51 pour Windows, Linux, FreeBSD, Solaris, Mac OS X.
www.opera.com , c'est bon et sans morceau de pub dedans, mangez-en.
Un pingouin aux pommes ?
n°7124
made_in_as​ia
Profil : Membre
Posté le 14-03-2004 à 22:20:05  
 

Hmmm; en gros, tu peux customiser tous les components Java avec ça non ?
 
Et pour les constantes graphiques, c'est quoi exactement ? (par rapport à ton code :
 
// On récupère le Look & Feel par défaut  
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());  
  // On récupère la table des constantes du L&F  
  UIDefaults uidef = UIManager.getDefaults();  
  // On set qqes paramètres graphiques  
  uidef.put("SplitPaneDivider.border", BorderFactory.createLineBorder(new ColorUIResource(37,82,130),1));  
  uidef.put("SplitPane.background", new ColorUIResource(37,82,130));  
  uidef.put("SplitPane.dividerSize", new Integer(10));
 
)
 
Made.

n°7126
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 15-03-2004 à 01:12:12  
 

C'est ce que j'ai fait pour designer toute mon appli ;)
C'est plutot pratique, mais c'est toutefois limité.
Je pensais aussi m'appuyer sur ce principe pour permettre, dans une certaine limite, de skinner l'application...
 
Extrait pour donner des idées :

Code :
  1. UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
  2.       //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  3.       UIDefaults uidef = UIManager.getDefaults();
  4.       // On set qqes paramètres graphiques
  5.       uidef.put("PopupMenu.background", new ColorUIResource(97,144,206));
  6.       uidef.put("PopupMenu.foreground", new ColorUIResource(255,255,255));
  7.       uidef.put("PopupMenu.border", BorderFactory.createLineBorder(new ColorUIResource(0,0,0),1));
  8.       //
  9.       uidef.put("ToolBar.background", new ColorUIResource(247, 247, 247));
  10.       //
  11.       uidef.put("Button.background", new ColorUIResource(247, 247, 247));
  12.       //uidef.put("Button.border",BorderFactory.createEtchedBorder(EtchedBorder.LOWERED,new Color(255, 255, 255),new Color(230, 230, 230)));
  13.       //uidef.put("Button.margin", new InsetsUIResource(0, 7, 0, 7));
  14.       //
  15.       uidef.put("MenuItem.background", new ColorUIResource(97,144,206));
  16.       uidef.put("MenuItem.foreground", new ColorUIResource(255,255,255));
  17.       uidef.put("MenuItem.selectionBackground", new ColorUIResource(255,255,255));
  18.       uidef.put("MenuItem.selectionForeground", new ColorUIResource(97,144,206));
  19.       uidef.put("MenuItem.disabledForeground", new ColorUIResource(97,144,206));
  20.       uidef.put("MenuItem.borderPainted", new Boolean(false));
  21.       //
  22.       uidef.put("Menu.background", new ColorUIResource(247, 247, 247));
  23.       uidef.put("Menu.foreground", new ColorUIResource(0, 0, 0));
  24.       uidef.put("Menu.selectionForeground", new ColorUIResource(255, 255, 255));
  25.       uidef.put("Menu.selectionBackground", new ColorUIResource(8, 142, 239));
  26.       uidef.put("Menu.borderPainted", new Boolean(true));
  27.       uidef.put("Menu.border",
  28.                 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED,
  29.                                                  new Color(255, 255, 255),
  30.                                                  new Color(230, 230, 230)));
  31.       //
  32.       uidef.put("Separator.background", new ColorUIResource(145,178,221));
  33.       uidef.put("Separator.foreground", new ColorUIResource(48,72,103));
  34.       uidef.put("Separator.highlight", new ColorUIResource(145,178,221));
  35.       uidef.put("Separator.shadow", new ColorUIResource(48,72,103));
  36.       //
  37.       uidef.put("TabbedPane.light", new ColorUIResource(0, 255, 0));
  38.       uidef.put("TabbedPane.highlight", new ColorUIResource(189, 195, 198)); //bord principal clair
  39.       uidef.put("TabbedPane.shadow", new ColorUIResource(247, 247, 247)); //ombre interne
  40.       uidef.put("TabbedPane.darkShadow", new ColorUIResource(189, 195, 198)); //bord principal ombré
  41.       uidef.put("TabbedPane.background", new ColorUIResource(255, 255, 255));
  42.       uidef.put("TabbedPane.foreground", new ColorUIResource(0, 0, 0));
  43.       uidef.put("TabbedPane.textIconGap", new Integer(3));
  44.       uidef.put("TabbedPane.contentBorderInsets", new InsetsUIResource(1, 0, 0, 0));
  45.       uidef.put("TabbedPane.tabAreaInsets", new InsetsUIResource(2,5,0,2));
  46.       uidef.put("TabbedPane.tabInsets", new InsetsUIResource(1,2,0,3));
  47.       //uidef.put("TabbedPane.selectedTabPadInsets", new InsetsUIResource(3,3,3,3));
  48.       //
  49.       //uidef.put("SplitPaneDivider.border", BorderFactory.createLineBorder(new ColorUIResource(247, 247, 247), 1));
  50.       //uidef.put("SplitPane.dividerSize", new Integer(5));
  51.       uidef.put("SplitPane.background", new ColorUIResource(247, 247, 247));
  52.       uidef.put("SplitPane.border", BorderFactory.createEmptyBorder(3,0,0,0));
  53.       //
  54.       uidef.put("ScrollBar.thumb", new ColorUIResource(8, 142, 239)); //Couleur de fond des boutons.
  55.       uidef.put("ScrollBar.thumbDarkShadow", new ColorUIResource(7, 131, 221)); //bord sombre des boutons.
  56.       uidef.put("ScrollBar.thumbHighlight", new ColorUIResource(90, 178, 247)); //bord éclairé des boutons.
  57.       uidef.put("ScrollBar.thumbShadow", new ColorUIResource(0, 85, 198)); //ombre des boutons.
  58.       uidef.put("ScrollBar.track", new ColorUIResource(8, 142, 239)); //1ère couleur de fond de la barre
  59.       uidef.put("ScrollBar.trackForeground", new ColorUIResource(8, 142, 239)); //(8,142,239) 2ème couleur de fond de la barre.
  60.       uidef.put("ScrollBar.width", new Integer(16));
  61.       //uidef.put("ScrollBar.background", new ColorUIResource(0,0,0));
  62.       //uidef.put("ScrollBar.foreground", new ColorUIResource(255,255,255));
  63.       //uidef.put("ScrollBar.trackHighlight", new ColorUIResource(255,255,0));
  64.       //uidef.put("ScrollBar.trackHighlightForeground", new ColorUIResource(0,255,255));
  65.       //
  66.       uidef.put("ScrollPane.background", new ColorUIResource(0, 85, 198));
  67.       uidef.put("ScrollPane.foreground", new ColorUIResource(255, 207, 0));
  68.       uidef.put("ScrollPane.border", BorderFactory.createCompoundBorder(
  69.           BorderFactory.createLineBorder(new ColorUIResource(189, 195, 198), 1),
  70.           BorderFactory.createLineBorder(new Color(0, 85, 198), 1)
  71.           ));
  72.       //
  73.       uidef.put("Tree.background", new ColorUIResource(8, 142, 239));
  74.       uidef.put("Tree.foreground", new ColorUIResource(255, 255, 255));
  75.       uidef.put("Tree.closedIcon", new ImageIcon("images/plus_plot.png" ));
  76.       uidef.put("Tree.openIcon", new ImageIcon("images/minus_plot.png" ));
  77.       uidef.put("Tree.leafIcon", new ImageIcon("images/papillon.png" ));
  78.       uidef.put("Tree.selectionBackground", new ColorUIResource(8, 142, 239));
  79.       uidef.put("Tree.selectionForeground", new ColorUIResource(0, 0, 0));
  80.       uidef.put("Tree.selectionBorderColor", new ColorUIResource(8, 142, 239));
  81.       uidef.put("Tree.textBackground", new ColorUIResource(8, 142, 239));
  82.       uidef.put("Tree.textForeground", new ColorUIResource(255, 255, 255));
  83.       uidef.put("Tree.hash", new ColorUIResource(0, 85, 198));
  84.       uidef.put("Tree.rightChildIndent", new Integer(8));
  85.       uidef.put("Tree.rowHeight", new Integer(18));
  86.       //---uidef.put("Tree.collapsedIcon", new ImageIcon("images/plus_plot.png" ));
  87.       //---uidef.put("Tree.expandedIcon", new ImageIcon("images/minus_plot.png" ));
  88.       //
  89.       uidef.put("MenuBar.background", new ColorUIResource(247, 247, 247));
  90.       uidef.put("MenuBar.border", BorderFactory.createEmptyBorder(3, 5, 0, 5));
  91.       //
  92.       /*
  93.       uidef.put("TextArea.background", new ColorUIResource(255, 255, 255));
  94.       uidef.put("TextArea.foreground", new ColorUIResource(0, 85, 198));
  95.       uidef.put("TextArea.selectionBackground", new ColorUIResource(0, 85, 198));
  96.       uidef.put("TextArea.selectionForeground",
  97.                 new ColorUIResource(255, 255, 255));
  98.       uidef.put("TextArea.border", BorderFactory.createCompoundBorder(
  99.            BorderFactory.createLineBorder(new ColorUIResource(189, 195, 198), 1),
  100.            BorderFactory.createLineBorder(new Color(0, 85, 198), 1)
  101.            ));
  102.       uidef.put("TextArea.margin", new InsetsUIResource(5,5,5,5));
  103.       uidef.put("TextArea.font", new Font("Verdana", Font.PLAIN, 12));
  104.       */
  105.       //
  106.       uidef.put("EditorPane.background", new ColorUIResource(8, 142, 255));
  107.       uidef.put("EditorPane.caretForeground", new ColorUIResource(255, 255, 255));
  108.       uidef.put("EditorPane.foreground", new ColorUIResource(255, 255, 255));
  109.       uidef.put("EditorPane.selectionBackground", new ColorUIResource(0, 69, 162));
  110.       uidef.put("EditorPane.selectionForeground", new ColorUIResource(255, 255, 255));
  111.       uidef.put("EditorPane.font", new Font("Verdana", Font.PLAIN, 12));


---------------
C'est naturel que les filles soient plus belles, et les garçons plus cons ^^ [un peu bonobo sur les bords]
n°9146
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 17-06-2004 à 13:58:27  
 

oups  [:chkkonk]


Message édité par ollone le 17-06-2004 à 13:59:40
n°20239
gfrax
Profil : Jeune recrue
Posté le 25-03-2012 à 03:38:49  
 

Une solution plus simple :
 
public class mySplitPane extends JSplitPane {
 
 JSplitPane splitPane;
 
 mySplitPane(int orientation) {
  super(orientation);
  splitPane=this;
  BasicSplitPaneUI ui= new BasicSplitPaneUI() {
     public void paint(Graphics g, JComponent jc)
     {
    g.setColor(Color.red);
    Dimension dim = splitPane.getSize();
       g.fillRect(0, 0, dim.width, dim.height);
     }
  };
   
  this.setUI(ui);
   
 }
}

  FORUM Rue-Montgallet.com
  Programmation
  Java

  design perso pour JSplitPane [avec soluce]

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés