Cómo cambiar el color de un JSplitPane

He escrito un pequeño progtwig, mientras leía un libro sobre swing, que crea un JSplitPane entre dos tags. El problema es que el JSplitPane apenas se puede ver (al menos en mi sistema operativo – MAC OS Lion) y establecer algunas propiedades en él (como el color de primer plano) no parece funcionar.

Aquí está el código:

//Demonstrate a simple JSplitPane package swingexample4_6; import javax.swing.*; import java.awt.*; public class SplitPaneDemo { //constructor public SplitPaneDemo() { //Create a new JFrame container. //Use the default border layout JFrame jfrm = new JFrame("Split Pane Demo"); //Give the frame an initial size jfrm.setSize(380, 150); //Terminate the program when the user closes the application jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //--Make two labels to show the split pane JLabel jlab = new JLabel(" Left side: ABCDEFGHIJKLMNOPQRSTUVWXYZ"); JLabel jlab2 = new JLabel(" Right side: ABCDEFGHIJKLMNOPQRSTUVWXYZ"); //Set the minimum size for each label //This step is not technically needed to use a split pane, //but it enables the split pane resizing features to be //used to their maximum extent jlab.setMinimumSize(new Dimension(90, 30)); jlab2.setMinimumSize(new Dimension(90, 30)); //--Create a split pane JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, jlab, jlab2); //Code to get a list of component names in the console Component[] listComponents = jsp.getComponents(); String theList; for (Component myComponent: listComponents) { theList = myComponent.toString(); System.out.println(theList); } //Add the split pane to the content pane jfrm.getContentPane().add(jsp); //Display the frame jfrm.setVisible(true); } public static void main(String[] args) { //Create the frame on the event dispatching thread SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { new SplitPaneDemo(); } }); } } 

¿Hay alguna forma en que pueda cambiar su color para que realmente se destaque? Gracias.

JLabel es por defecto NON_Opaque , simple es transparente, puede

  • cambiar JLabels al JComponent o JPanel podría ser mejor

  • cambie la opacidad por JLabel#setOpaque(true)

Puede usar la propiedad SplitPane.background , como se muestra a continuación.

Fondo de SplitPane

 import javax.swing.*; import java.awt.*; /** @see http://stackoverflow.com/a/10110232/230513 */ public class SplitPaneDemo { //constructor public SplitPaneDemo() { JFrame jf = new JFrame("Split Pane Demo"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //--Make two labels to show the split pane JPanel left = content("Left side: "); JPanel right = content("Right side: "); //--Create a split pane JSplitPane jsp = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, true, left, right); jsp.setDividerLocation(0.5f); //Add the split pane to the frame's content pane jf.add(jsp); jf.pack(); //Display the frame jf.setLocationRelativeTo(null); jf.setVisible(true); //Code to get a list of component names in the console for (Component myComponent : jsp.getComponents()) { System.out.println(myComponent); } } private JPanel content(String s) { final JLabel label = new JLabel(s + "Some text.", JLabel.CENTER); JPanel panel = new JPanel(new GridLayout()) { @Override public Dimension getPreferredSize() { Dimension d = label.getPreferredSize(); return new Dimension(d.width * 2, d.height * 3); } }; panel.setOpaque(true); panel.setBackground(new Color(0xffffffc0)); panel.add(label); return panel; } public static void main(String[] args) { UIManager.put("SplitPane.background", new Color(0xff8080ff)); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new SplitPaneDemo(); } }); } }