2011-12-06 15 views
1

我无法更改Java Swing JScrollBar的颜色。我已经在这方面进行了很多搜索和阅读。我正在尝试使用XML文件来定义使用Swing的Synth外观的颜色。这对于一个按钮来说工作得很好,但对于滚动条来说完全不起作用。无法使用合成器更改ScrollBar的颜色 - Java Swing

我一直希望能够附加文件到这个问题,但它似乎没有,我可以。我很乐意向您发送这些文件。

在此先感谢。 ---艾伦

下面是XML文件的内容:

<synth> 

     <!-- Style that all regions will use --> 
    <style id="backingStyle"> 
    <!-- Make all the regions that use this skin opaque--> 
    <opaque value="TRUE"/> 
    <font name="Dialog" size="12"/> 
    <state> 
     <!-- Provide default colors --> 
     <color value="#F5DEB3" type="BACKGROUND"/> 
     <color value="black" type="FOREGROUND"/> 
    </state> 
    </style> 
    <bind style="backingStyle" type="region" key=".*"/> 

    <!-- Scroll bar track style --> 
    <style id="scrollBarTrackStyle"> 
    <state> 
     <color value="red" type="BACKGROUND"/> 
     <color value="blue" type="FOREGROUND"/> 
    </state> 
    </style> 
    <bind style="scrollBarTrackStyle" type="REGION" key="ScrollBarTrack" /> 

    <!-- Scroll bar thumb style --> 
    <style id="scrollBarThumbStyle"> 
    <state> 
     <color value="white" type="BACKGROUND"/> 
     <color value="yellow" type="FOREGROUND"/> 
    </state> 
    </style> 
    <bind style="scrollBarThumbStyle" type="REGION" key="ScrollBarThumb" /> 

    <!-- Scroll bar style --> 
    <style id="scrollBarStyle"> 
    <state> 
     <color value="red" type="BACKGROUND"/> 
     <color value="blue" type="FOREGROUND"/> 
    </state> 
    </style> 
    <bind style="scrollBarStyle" type="REGION" key="ScrollBar" /> 

</synth> 

这里是源代码:

/* 
* TestSynthScrollBar.java 
* 
* Created on Dec 5, 2011, 2:52:26 PM 
*/ 

package playDisplay; 

import javax.swing.UIManager; 
import javax.swing.plaf.synth.SynthLookAndFeel; 

public class TestSynthScrollBar extends javax.swing.JFrame 
{ 

    private static String synthFile = "scrollBarSkin.xml"; 

    /** Creates new form TestSynthScrollBar */ 
    public TestSynthScrollBar() 
    { 
     initComponents(); 
    } 

    private static void initAnotherLookAndFeel() 
    { 
     SynthLookAndFeel badAssLookAndFeel = new SynthLookAndFeel(); 
     try 
     { 
      badAssLookAndFeel.load(TestSynthScrollBar.class.getResourceAsStream(synthFile), TestSynthScrollBar.class); 
      UIManager.setLookAndFeel(badAssLookAndFeel); 
     } 
     catch (Exception e) 
     { } 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
    private void initComponents() { 

     somePanel = new javax.swing.JPanel(); 
     someScrollPane = new javax.swing.JScrollPane(); 
     someTextArea = new javax.swing.JTextArea(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     someScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     someScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     someTextArea.setColumns(20); 
     someTextArea.setRows(5); 
     someScrollPane.setViewportView(someTextArea); 

     javax.swing.GroupLayout somePanelLayout = new javax.swing.GroupLayout(somePanel); 
     somePanel.setLayout(somePanelLayout); 
     somePanelLayout.setHorizontalGroup(
      somePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(somePanelLayout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(someScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     somePanelLayout.setVerticalGroup(
      somePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, somePanelLayout.createSequentialGroup() 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(someScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap()) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(somePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(somePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold>//GEN-END:initComponents 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) 
    { 
     initAnotherLookAndFeel(); 

     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new TestSynthScrollBar().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify//GEN-BEGIN:variables 
    private javax.swing.JPanel somePanel; 
    private javax.swing.JScrollPane someScrollPane; 
    private javax.swing.JTextArea someTextArea; 
    // End of variables declaration//GEN-END:variables 

} 

回答

1

试试这个

UIManager.getLookAndFeelDefaults().put("ScrollBar.thumb", Color.blue); 

它只会与工作母题看&感觉虽然。如果你使用Metal外观,它不会做任何事情。

+0

约翰尼,为什么不为金属LAF做这项工作?谢谢,艾伦 – Alan

+0

从我所看到的,我似乎没有与该LAF工作。试一试。 –