2012-07-05 6 views
0

우리 응용 프로그램에서는 CSS를 사용하여 Swing 구성 요소의 모양을 사용자 정의해야합니다. 지금 당장 우리는 수동으로 작성된 CSS 엔진을 가지고 있지만 속도가 떨어지고 하나의 CSS 파일을 더 많이 적용해야합니다. 이제 우리는 Synth look and feel을 사용하여 더 많이 변경하려고합니다 .Synth LaF에서 jScrollbar의 여러 가지 사용자 정의 모양을 만드는 방법은 무엇입니까?

대부분의 구성 요소에 대해 이름을 설정하고 스타일 바인딩에 사용합니다. 하지만 다른 CSS와 다른 모양을 가진 여러 스크롤바가 있습니다. 스크롤 바의 엄지 손가락에 영향을주는 유일한 방법은 사용자 영역 ScrollBarThumb입니다. JComponent가 아니기 때문에 이름을 설정할 수 없습니다. 이름 대신 영역을 사용하기 때문에 다른 엄지 손가락을 가질 수 없습니다. 해결 방법이 있습니까? 내가 사용하는 것 SYNT의 L & F의 인스턴스에서

+0

같은 이름의 계층 구조를 사용합니다. "chat.tabbedpane.panel.label"이므로 다음과 같이 만들 수 있습니다 : 이름에 "chat"이 포함되어 있으면 scrollbar1을 그립니다. 이렇게하는 것이 더 좋은 방법이되기를 바랍니다. –

+0

[클래식 Synth] (http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/synth.html)를 사용하는 경우 xml 파일과 [SSCCE] (http : // sscce /) – mKorbel

답변

3

enter image description hereenter image description here

에 (Java6)

import com.sun.java.swing.Painter; 
import java.awt.Color; 
import java.awt.Graphics2D; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class ScrollDemo extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public ScrollDemo() { 
     JTextField field = new JTextField(); 
     String[] columnNames = {"Column"}; 
     Object[][] data = { 
      {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, 
      {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, 
      {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, 
      {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, 
      {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},}; 

     add(new JScrollPane(new JTable(data, columnNames))); 
     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
     } catch (Exception fail) { 
     } 
     UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[Enabled].backgroundPainter", 
       new FillPainter(new Color(255, 169, 191))); 
     UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter", 
       new FillPainter(new Color(127, 255, 191))); 
     UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarTrack[Enabled].backgroundPainter", 
       new FillPainter(new Color(0, 212, 255))); 
     UIManager.getLookAndFeelDefaults().put("ScrollBar:\"ScrollBar.button\".size", 20); 
     //UIManager.getLookAndFeelDefaults().put("ScrollBar.decrementButtonGap", 10); 
     //UIManager.getLookAndFeelDefaults().put("ScrollBar.incrementButtonGap", 10); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ScrollDemo scrollDemo = new ScrollDemo(); 
      } 
     }); 
    } 
} 

class FillPainter implements Painter<JComponent> { 

    private final Color color; 

    public FillPainter(Color c) { 
     color = c; 
    } 

    @Override 
    public void paint(Graphics2D g, JComponent object, int width, int height) { 
     g.setColor(color); 
     g.fillRect(0, 0, width - 1, height - 1); 
    } 
} 
+0

+1 파스텔! :-) – trashgod