ItemSelectable
ํญ๋ชฉ ์ด๋ฒคํธ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌ์ฑ ์์์ ์ํด ์์๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ItemSelectable
๊ตฌ์ฑ ์์๋ ํ๋ ์ด์์ ํญ๋ชฉ์ ๋ํด ์ผ์ง/๊บผ์ง ์ํ๋ฅผ ์ ์งํ๋ค.
ํญ๋ชฉ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ Swing ๊ตฌ์ฑ ์์์๋ ์ฒดํฌ ์์ , ์ฒดํฌ ๋ฉ๋ด ํญ๋ชฉ , ํ ๊ธ ๋ฒํผ ๋ฑ๊ณผ ๊ฐ์ ๋ฒํผ๊ณผ ์ฝค๋ณด ์์ ๊ฐ ํฌํจ๋๋ค.
checkbox,addItemListener(this);
...
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
label.setVisible(true);
...
} else {
label.setVisible(false);
}
}
์ฐ๋ฆฌ๊ฐ ๋ฒํผ๊ณผ ์ฝค๋ณด์์์์ ActionListener
๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋์ผํ ์ ํ์ ๋ํด ์ค๋ณต๋๋ ์คํ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ๋ค์ด, ์ ํ๋ ๋ผ๋์ค๋ฒํผ์ ์ํ๋ ์ฒดํฌํ ๋ ๋ฐ์ํ๋ค.
ItemListener iListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
JRadioButton rbtn = (JRadioButton)ie.getSource();
// ์ ํ๋์ ๋๋ง ์กฐ๊ฑดํ๋ค๋ ๋ป
if(ie.getStateChange() == ItemEvent.SELECTED) {
System.out.println("์ ํ => ");
// ์ ํ์๋์ ๋
} else if(ie.getStateChange() == ItemEvent.DESELECTED) {
System.out.println("์ ํํด์ => ");
}
System.out.println(rbtn.getText());
}
};
โ๏ธ ie.getStateChange() โก๏ธ ์ด๋ฒคํธ ์ข ๋ฅ๋ฅผ ๋ํ๋ธ๋ค.
โ๏ธ ItemEvent.SELECTED โก๏ธ ์ ํ ์
โ๏ธ ItemEvent.DESELECTED โก๏ธ ์ ํํด์ ์
์ฌ๊ธฐ์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ์ด ์ ํ
์ ํํด์
์ด 2๊ฐ๊ฐ ์ฐํ๋ค.
๊ทธ ์ด์ ๋ ๋ฒํผ์ ์ ํํ๊ณ ๋ค๋ฅธ ๋ฒํผ ์ ํํ ๋, ์ทจ์๋ ๋ฒํผ์ ๊ณ์ ์คํ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ActionListener
๋ ์ฐ์ง ์๋๋ค. (๊ณ์ ์คํ๋ผ์ ์ค๋ณต์ด ๋จ)
ItemListener
ํ๋์ ๋ฉ์๋๋ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ด๋ํฐ ํด๋์ค๊ฐ ์๋ค.
- itemStateChanged(์์ดํ ์ด๋ฒคํธ)
: ๋ฃ๋ ๊ตฌ์ฑ ์์์ ์ํ ๋ณ๊ฒฝ ์งํ์ ํธ์ถ๋๋ค.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ItemEventEx1 extends JFrame {
private JRadioButton rbtnRed;
private JRadioButton rbtnBlack;
private JRadioButton rbtnWhite;
private JLabel lblMain;
private ItemEventEx1() {
init();
setDisplay();
addListeners();
showFrame();
}
private void init() {
rbtnRed = new JRadioButton("Red");
rbtnBlack = new JRadioButton("Black");
rbtnWhite = new JRadioButton("White", true);
ButtonGroup group = new ButtonGroup();
group.add(rbtnRed);
group.add(rbtnBlack);
group.add(rbtnWhite);
lblMain = new JLabel("White", JLabel.CENTER);
lblMain.setFont(new Font(Font.SERIF, Font.BOLD, 50));
lblMain.setOpaque(true); // ๋ถํฌ๋ช
ํ๊ฒ ๋ง๋ค์ด์ค
lblMain.setBackground(Color.WHITE);
lblMain.setForeground(Color.GREEN); // ํฐํธ ์์๋ฐ๊พธ๊ธฐ
}
private void setDisplay() {
JPanel pnlSouth = new JPanel(new GridLayout(1, 4));
pnlSouth.add(new JLabel("background: ", JLabel.CENTER));
pnlSouth.add(rbtnRed);
pnlSouth.add(rbtnBlack);
pnlSouth.add(rbtnWhite);
add(lblMain, BorderLayout.CENTER);
add(pnlSouth, BorderLayout.SOUTH);
}
private void addListeners() {
// ์ฒดํฌ๋ฐ์ค ์ ํ ItemListener
ItemListener itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
Color color = Color.WHITE; // ๋ฐฐ๊ฒฝ์
String strColor = "white"; // ๋ฐฐ๊ฒฝ๊ธ
if(ie.getStateChange() == ItemEvent.SELECTED) {
JRadioButton rbtn = (JRadioButton)ie.getSource();
if(rbtn == rbtnRed) {
color = Color.RED;
strColor = "Red";
} else if(rbtn == rbtnBlack) {
color = Color.BLACK;
strColor = "black";
}
lblMain.setBackground(color);
lblMain.setText(strColor);
}
}
};
rbtnRed.addItemListener(itemListener);
rbtnBlack.addItemListener(itemListener);
rbtnWhite.addItemListener(itemListener);
// ์๋ฆผ์ฐฝ WindowAdapter
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
int choice = JOptionPane.showConfirmDialog(
ItemEventEx1.this,
"์ข
๋ฃํฉ๋๋ค.",
"์ข
๋ฃ",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE
);
if(choice == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
}
private void showFrame() {
setTitle("ItemEvent");
pack();
setLocation(100, 0);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new ItemEventEx1();
}
}