다음 예제 코드를 사용하십시오. Swing에는, HTML이 포함 된 경우 비활성화 된 구성 요소가 비활성화 된 것으로 렌더링되지 않는 버그가 있습니다. 동료가 이미 처리하기를 희망하는 문제를보고하는 것 외에 문제를 해결할 수있는 좋은 방법이 있습니까?JCheckBox의 비활성화 된 모양을 어떻게 복제 할 수 있습니까?
내가 취하는 해결책은 무엇이든간에 응용 프로그램의 모든 확인란에 해킹해야하는 것과는 달리 글로벌 수정이 필요합니다. ,
나는 이전과 그림 후setForeground
를 호출하는 확인란에 대한 사용자 지정 UI를 만드는 시도,하지만
setForeground
를 호출하여, 그것이 렌더러를 호출
repaint()
를 호출에 궁극적으로 결과 이벤트를 발생시킵니다 것으로 나타났다. ..
import java.awt.GridLayout;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class TestCheckBoxes extends JFrame
{
public TestCheckBoxes()
{
JCheckBox checkBox1 = new JCheckBox("Enabled, plain text");
JCheckBox checkBox2 = new JCheckBox("<html><p>Enabled, HTML");
JCheckBox checkBox3 = new JCheckBox("Disabled, plain text");
checkBox3.setEnabled(false);
JCheckBox checkBox4 = new JCheckBox("<html><p>Disabled, HTML");
checkBox4.setEnabled(false);
setLayout(new GridLayout(4, 1));
for (JCheckBox checkBox : Arrays.asList(checkBox1, checkBox2, checkBox3, checkBox4))
{
checkBox.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
add(checkBox);
}
((JComponent) getContentPane()).setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
pack();
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
TestCheckBoxes frame = new TestCheckBoxes();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
거기에 HTML이 필요한 이유는 무엇입니까? 위의 발췌문 에서처럼 나는 아무 것도 찾을 수 없었습니다. – Nivas
이것은 문제를 재현 할 수있는 최소한의 예일뿐입니다. 실제 응용 프로그램에는 두 개의 비슷한 모양의 체크 상자가 나란히 있으므로 대담한 단어가 강조되어 있습니다. – Trejkaz