2014-03-02 14 views
0

JSpinner 클래스에서 두 개의 BasicArrowButton (위아래) 구성 요소의 전경색은 어떻게 변경합니까?
component.setForeground(<<a_color>>)이 작동하지 않습니다.

미리 감사드립니다.
EDITBasicArrowButton의 스윙 변경 전경색

private void set_colors(JSpinner spinner){ 
    int n = spinner.getComponentCount(); 
    for (int i=0; i<n; i++) 
    { 
     Component c = spinner.getComponent(i); 
     System.out.println(c); 
     if (c instanceof BasicArrowButton) 
     { 
      c.setForeground(ds_conn_text.getForeground());//doesn't work, doesn't change arrow color 
      c.setBackground(ds_conn_text.getBackground()); 
      BasicArrowButton c0=(BasicArrowButton) c;c0.setBorder(ok_button.getBorder()); 
     } 
    } 
} 

답변

2

이는 단지가 paint 메소드를 오버라이드하지 않고, 화살표의 색을 설정 것은 불가능 Swing change the JSpinner back and fore colors

의 후속 질문이다. 그 이유는 단순히 화살표의 색이 단추의 "그림자"에 사용되는 색과 같은 색이기 때문입니다. 그래서 당신은 어딘가에 main에 선

UIManager.getDefaults().put("controlDkShadow", Color.MAGENTA); 

을 넣을 수 있지만, 이것은 실제로 변경하지 않음 화살표 색상뿐만 아니라 다른 요소의 색상을 변경하지 않을 것입니다.

못생긴/해키

private static void hackilySetColor(JSpinner spinner, Color color) 
{ 
    int n = spinner.getComponentCount(); 
    for (int i=0; i<n; i++) 
    { 
     Component c = spinner.getComponent(i); 
     if (c instanceof BasicArrowButton) 
     { 
      try 
      { 
       Field field = BasicArrowButton.class.getDeclaredField("darkShadow"); 
       field.setAccessible(true); 
       field.set(c, color); 
       field.setAccessible(false); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

것 특정 인스턴스에 대한 을이 색상을 설정하는 방법 만이 반사를 사용하고는, 정말 추한 해킹이며, 여전히의 색상을 대체 " 어두운 그림자 "버튼의 테두리입니다.

당신은 이런 것들에 대한 자신의 UI와 더 나을 것 -

+0

완벽한, 완벽한 (단지에있는 모든 색상을 변경하지 않습니다 ... 또는이 ... 어쨌든 나에게 오히려 쓸모없는 것 같다) . 고마워, 여보. –

+0

그냥 색상을 바꾸지 마십시오. == 적절한 L & F를 사용하십시오. – mKorbel