2016-07-04 1 views
1

레이아웃과 관련하여 거의 모든 것이 변경된 JComboBox가 있습니다. 팝업의 선택 색상, 화살표 버튼, 배경색 등을 변경했습니다. 내가 원하는 방식으로 보이지 않는 마지막 나머지 부분은 팝업의 테두리 색상 (내부 JList)입니다.JComboBox의 내부 팝업 (JList)의 테두리 색상 변경

내 콤보 상자는 다음과 같습니다 당신이 볼 수 있듯이

enter image description here

, 그것은 전체 레이아웃에 일치하지 않는 검은 색 테두리가 있습니다. 위 경계선에서 보게되는 푸른 색으로 바꾸고 싶습니다.

몇 가지 조사를했지만 아무런 해결책이 없었습니다. 가장 가까운 해결책은 post입니다. 그러나 그것은 효과가 없었습니다. 나는 그 경계를 변경하기 위해 별도의 방법을 만들어,

public static void setSelectionColorOfComboBox(JComboBox<String> comboBox) 
{ 
    Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
    BasicComboPopup popup = (BasicComboPopup) child; 
    JList list = popup.getList(); 
    list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE, 1)); 
    list.setSelectionBackground(ColorPalette.LIGHT_BLUE); 
    list.setSelectionForeground(Color.WHITE); 
    list.setFocusable(false); 
} 

아무것도 그리워하지 않도록 만들려면 :

는 seleciton 색상의 변화와 함께, 이미 경계는 다음과 같은 방법으로 색을 변경하려 위의 링크 된 게시물에 따르면 :

public static void setBorderColorOfComboBoxPopup(JComboBox<String> comboBox) 
{ 
    Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
    BasicComboPopup popup = (BasicComboPopup) child; 
    JList list = popup.getList(); 
    list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE)); 
} 

하지만이 역시 작동하지 않았습니다. 누구나 그 일반적인 방법이 나를 위해 작동하지 않는 이유를 아는 사람이 있습니까? 아니면 다른 사람이 최소한 테두리 색을 변경하는 다른 방법을 알고 있으므로 다른 것을 시도 할 수 있습니까?

현재 JList 주변에 스크롤 창과 같은 것이 있으면 생각하고 있습니다. 가능하다면 JList에 액세스하고 테두리를 설정할 수 있는지에 대해 조사 할 것입니다.

답변

1

당신은 팝업에 대한 경계를 변경할 수 BasicComboBoxUI 클래스의 createPopup() 메소드를 오버라이드 (override) 할 수 있습니다 노력과 연구의 시간 후

jComboBox.setUI(new BasicComboBoxUI() { 
    @Override 
    protected ComboPopup createPopup() { 
     BasicComboPopup basicComboPopup = new BasicComboPopup(comboBox); 
     basicComboPopup.setBorder(new LineBorder(Color.RED)); 
     return basicComboPopup; 
    } 
}); 
+0

예. 감사합니다. 몇 분 전에, 나는 그 해결책에 역시왔다. :) 나는 여전히 최선의 답변으로 표시 할 것입니다. – KJaeg

0

가 스크롤 창 내 마지막 아이디어는 그냥 솔루션에 나를 안내 몇 분. 목록이 포함 된 구성 요소를 생각하면 팝업에 대해 생각했습니다. 팝업에는 두 개의 레벨이 있으며 테두리가있을 수 있습니다. 첫 번째는 팝업의 JList이고 두 번째 팝업은 팝업입니다. 어떻게 든 검은 테두리가 내 JList의 파란색 테두리를 덮었습니다. 길게만 짧게 코드 조각이 다음과 같이 작동했습니다.

public static void setBorderColorOfComboBoxPopup(JComboBox<String> comboBox) 
{ 
    Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
    BasicComboPopup popup = (BasicComboPopup) child; 
    popup.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE)); 
// JList list = popup.getList(); 
// list.setBorder(new LineBorder(ColorPalette.LIGHT_BLUE)); 
}