티스토리 뷰
3 상태 체크박스는 위키에 따르면 일반적인 2개의 상태를 가지는 체크박스에 indeterminate 상태가 추가돼 3개의 상태를 같는 체크 박스를 말합니다.
- https://en.wikipedia.org/wiki/Checkbox
이런 3 상태 체크박스는 컴퓨터 사용 중 주로 파일을 선택하는 Tree에서 볼 수 있는데, 파일 선택 트리는 아니지만 비슷한 이미지로 아래와 같은 트리가 있습니다. 자바의 스윙에선 자체적으로 3 상태 체크박스는 지원하지 않아 3상태 체크박스를 직접 만들어 사용하던지 다른 분들이 제공하는 라이브러리를 가져와 사용해야합니다.
이미지 출처 - https://stackoverflow.com/questions/31918913/checkbox-indeterminate-state-for-richfaces-tree
그래서 다음의 이미지 파일을 사용해서 3 상태 체크박스를 Swing으로 구현해봤습니다.
public class TSCheckBox extends JCheckBox { private boolean isIndet = false; private Icon indeterminate; private Icon checked; private Icon unchecked; public TSCheckBox(String s) { super(s); indeterminate = new ImageIcon(TSCheckBox.class.getResource("indeterminate.png")); unchecked = new ImageIcon(TSCheckBox.class.getResource("unchecked.png")); checked = new ImageIcon(TSCheckBox.class.getResource("checked.png")); } @Override public void paint(Graphics g) { if (isSelected()) isIndet = false; setIcon(isIndet ? indeterminate : isSelected() ? checked : unchecked ); super.paint(g); } public void setIndet(boolean value) { isIndet = value; if (isIndet) setSelected(false); repaint(); } public boolean isIndet() { return isIndet; } } | cs |
아래는 테스트 해본 코드와 실행 화면입니다.
public class Test extends JFrame { public static void main(String[] args) { Test frame = new Test(); } public Test() { ProjectGUI.apply(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); getContentPane().setLayout(null); TSCheckBox cheackbox = new TSCheckBox("TEST"); cheackbox.setBounds(8, 25, 115, 23); cheackbox.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if(e.getButton() == 3) cheackbox.setIndet(!cheackbox.isIndet()); super.mousePressed(e); } }); getContentPane().add(cheackbox); setVisible(true); } } | cs |
'Java > Swing' 카테고리의 다른 글
반투명 프레임 JFrame (0) | 2017.01.06 |
---|---|
자동 글자 크기 조절 JLabel (2) | 2016.09.27 |
JFrame 화면 가운데 배치하기 (Java/Swing) (1) | 2016.09.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday