1. 버튼 컴포넌트
▷ AbstractButton을 상속받은 하위 클래스들을 말함
▷ JButton, JToggleButton, JRadioButton, JCheckBox가 있고, 모두 사용자가 마우스로 클릭하여 사용 할 수 있음
(1) JButton
▷ 이미지와 텍스트로 구성된 일반적인 버튼을 만들 때 사용함
▷ setText() 메소드는 버튼의 텍스트를 설정하고, setIcon() 메소드는 버튼의 이미지를 설정함
◎ 텍스트, 이미지, 텍스트+이미지 버튼을 생성 예제
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JButtonExample extends JFrame { private JButton btn1, btn2, btn3; // 메인 윈도우 설정 public JButtonExample() { this.setTitle("JButtonExample"); this.setSize(300, 100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setLayout(new FlowLayout()); this.getContentPane().add(getBtn1()); this.getContentPane().add(getBtn2()); this.getContentPane().add(getBtn3()); } // 글자만 있는 버튼 생성 public JButton getBtn1() { if(btn1 == null) { btn1 = new JButton(); btn1.setText("새문서"); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser jFileChooser = new JFileChooser(); jFileChooser.showOpenDialog(JButtonExample.this); } }); } return btn1; } // 아이콘만 있는 버튼 생성 public JButton getBtn2() { if(btn2 == null) { btn2 = new JButton(); btn2.setIcon(new ImageIcon(getClass().getResource("new.gif"))); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser jFileChooser = new JFileChooser(); jFileChooser.showOpenDialog(JButtonExample.this); } }); } return btn2; } // 아이콘과 글자가 있는 버튼 생성 public JButton getBtn3() { if(btn3 == null) { btn3 = new JButton(); btn3.setText("새문서"); btn3.setIcon(new ImageIcon(getClass().getResource("new.gif"))); btn3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser jFileChooser = new JFileChooser(); jFileChooser.showOpenDialog(JButtonExample.this); } }); } return btn3; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JButtonExample jFrame = new JButtonExample(); jFrame.setVisible(true); } }); } }
출력 화면
(2) JToggleButton
▷ JToggleButton은 선택된 상태와 그렇지 않은 두 가지 상태를 가지는 버튼
▷ ActionListener보다는 ItemListener로 이벤트를 처리하는 것이 좋음
▷ ItemEvent의 getStateChange() 메소드는 JToggleButton이 선택되었을 경우 ItemEvent.SELECTED 상수값을 리턴
▷ JToggleButton은 단독으로 사용 가능하지만, 버튼 두 개를 ButtonGroup에 포함시키면 두 버튼을 배타적으로 선택가능
▶ ButtonGroup 내부에서는 하나의 버튼만이 선택된 상태로 존재할 수 있기 때문
◎ [On] [Off] 토글 버튼과, 배타적으로 선택할 수 있는 [Start]와 [Stop] 버튼을 생성 예제
import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JToggleButton; import javax.swing.SwingUtilities; import javax.swing.border.TitledBorder; public class JToggleButtonExample extends JFrame { private JPanel pFirst; private JPanel pSecond; private JToggleButton tbOnOff; private JToggleButton tbStart; private JToggleButton tbStop; // 메인 윈도우 설정 public JToggleButtonExample() { this.setTitle("JToggleButtonExample"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setLayout(new GridLayout(2,1)); this.getContentPane().add(getPFirst()); this.getContentPane().add(getPSecond()); this.pack(); } public JPanel getPFirst() { if(pFirst == null) { pFirst = new JPanel(); pFirst.add(getTbOnOff()); } return pFirst; } public JPanel getPSecond() { if(pSecond == null) { pSecond = new JPanel(); pSecond.setBorder(new TitledBorder("원하는 기능은?")); pSecond.add(getTbStart()); pSecond.add(getTbStop()); // 배타적 선택을 위한 ButtonGroup 생성 및 토글 버튼 추가 ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(getTbStart()); buttonGroup.add(getTbStop()); } return pSecond; } //On/off 토글 버튼 생성 public JToggleButton getTbOnOff() { if(tbOnOff == null) { tbOnOff = new JToggleButton(); tbOnOff.setText("On"); tbOnOff.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { getTbOnOff().setText("Off"); } else { getTbOnOff().setText("On"); } } }); } return tbOnOff; } // Start 토글 버튼 생성 public JToggleButton getTbStart() { if(tbStart == null) { tbStart = new JToggleButton(); tbStart.setText("Start"); tbStart.setIcon(new ImageIcon(getClass().getResource("start.gif"))); tbStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(JToggleButtonExample.this, "Start"); } }); } return tbStart; } // Stop 토글 버튼 생성 public JToggleButton getTbStop() { if(tbStop == null) { tbStop = new JToggleButton(); tbStop.setText("Stop"); tbStop.setIcon(new ImageIcon(getClass().getResource("stop.gif"))); tbStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(JToggleButtonExample.this, "Stop"); } }); } return tbStop; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JToggleButtonExample jFrame = new JToggleButtonExample(); jFrame.setVisible(true); } }); } }
(3) JRadioButton
▷ JToggleButton의 하위 클래스로, 둥근 모양의 선택과 텍스트를 함께 보여주는 버튼
▷ JRadioButton은 동일한 ButtonGroup에 포함되어 한 번에 하나의 JRadioButton만 선택된 상태를 가짐
▷ JRadioButton은 마우스로 클릭했을 때 ActionEvent가 발생하므로 ActionListener로 이벤트를 처리할 수 있음
◎ 두 개의 JRadioButton 중 하나를 선택하면 JLabel의 이미지가 변경되는 예제
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.SwingUtilities; public class JRadioButtonExample extends JFrame { private JPanel radioPanel; private JRadioButton rbBird; private JRadioButton rbCat; private JLabel lblPicture; // 메인 윈도우 설정 public JRadioButtonExample() { setTitle("JRadioButtonExample"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().add(getRadioPanel(), BorderLayout.WEST); this.getContentPane().add(getLblPicture(), BorderLayout.CENTER); pack(); } // JRadioButton이 배치된 JPanel 생성 public JPanel getRadioPanel() { if(radioPanel == null) { radioPanel = new JPanel(); radioPanel.setLayout(new GridLayout(2,1)); radioPanel.add(getRbBird()); radioPanel.add(getRbCat()); // 배타적 선택을 위해 ButtonGroup에 두 개의 JRadioButton 추가 ButtonGroup group = new ButtonGroup(); group.add(getRbBird()); group.add(getRbCat()); } return radioPanel; } // JRadioButton 생성 public JRadioButton getRbBird() { if(rbBird == null) { rbBird = new JRadioButton(); rbBird.setText("Bird"); rbBird.setSelected(true); // 기본적으로 선택되도록 설정 rbBird.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { getLblPicture().setIcon(new ImageIcon(getClass().getResource ("Bird.gif"))); } }); } return rbBird; } // JRadioButton 생성 public JRadioButton getRbCat() { if(rbCat == null) { rbCat = new JRadioButton(); rbCat.setText("Cat"); rbCat.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { getLblPicture().setIcon(new ImageIcon(getClass().getResource ("Cat.gif"))); } }); } return rbCat; } // 이미지를 보여줄 JLabel 생성 public JLabel getLblPicture() { if(lblPicture == null) { lblPicture = new JLabel(); lblPicture.setIcon(new ImageIcon(getClass().getResource("Bird.gif"))); } return lblPicture; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JRadioButtonExample jFrame = new JRadioButtonExample(); jFrame.setVisible(true); } }); } }
출력 화면
(4) JCheckBox
▷ 사각형의 체크박스와 텍스트를 함께 보여주는 컴포넌트, JToggleButton 상속하며 체크/언체크의 두 가지 상태를 가짐 ▷ 개별적으로 선택할 수 있다는 것이 JRadioButton과 다름
▷마우스로 클릭했을 때 ActionEvent가 발생하므로 ActionListener로 이벤트를 처리할 수 있음
▷ 선택 확인 방법은 isSelected() 메소드의 리턴값을 확인(true : 선택됨)
◎ CheckBox의 체크 상태에 따라 이미지를 변경하는 예제
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class JCheckBoxExample extends JFrame { private JPanel pWest; private JCheckBox cbGlasses; private JCheckBox cbHair; private JLabel lblPicture; // 메인 윈도우 설정 public JCheckBoxExample() { setTitle("JCheckBoxExample"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().add(getWest(), BorderLayout.WEST); this.getContentPane().add(getLblPicture(), BorderLayout.CENTER); this.pack(); } // 서쪽에 부착할 JPnal 생성 public JPanel getWest() { if(pWest == null) { pWest = new JPanel(new GridLayout(2,1)); // JCheckBox 추가 pWest.add(getCbGlasses()); pWest.add(getCbHair()); } return pWest; } // JCheckBox 생성 public JCheckBox getCbGlasses() { if(cbGlasses == null) { cbGlasses = new JCheckBox(); cbGlasses.setText("Glasses"); cbGlasses.addActionListener(actionListener); } return cbGlasses; } // JCheckBox 생성 public JCheckBox getCbHair() { if(cbHair == null) { cbHair = new JCheckBox(); cbHair.setText("Hair"); cbHair.addActionListener(actionListener); } return cbHair; } // 이미지 보여줄 JLabel 생성 public JLabel getLblPicture() { if(lblPicture == null) { lblPicture = new JLabel(); lblPicture.setIcon(new ImageIcon(getClass().getResource("geek.gif"))); } return lblPicture; } // JCheckBox 이벤트 처리 리스너를 위한 필드 선언 private ActionListener actionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(cbGlasses.isSelected() && cbHair.isSelected()) { lblPicture.setIcon(new ImageIcon(getClass().getResource ("geek-glasses-hair.gif"))); } else if(cbGlasses.isSelected()) { lblPicture.setIcon(new ImageIcon(getClass().getResource ("geek-glasses.gif"))); } else if(cbHair.isSelected()) { lblPicture.setIcon(new ImageIcon(getClass().getResource ("geek-hair.gif"))); } else { lblPicture.setIcon(new ImageIcon(getClass().getResource("geek.gif"))); } } }; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JCheckBoxExample jFrame = new JCheckBoxExample(); jFrame.setVisible(true); } }); } }
버튼, 체크박스, 라디오 버튼을 이용해서 이미지를 변경하도록 만들었습니다.
더 많은 기능들에 대해서 배워볼게요~!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > Java' 카테고리의 다른 글
[java]이것이 자바다 부록 Java UI 6-1 (Swing을 이용한 텍스트 컴포넌트 2) (0) | 2023.02.17 |
---|---|
[java]이것이 자바다 부록 Java UI 6 (Swing을 이용한 텍스트 컴포넌트) (1) | 2023.02.16 |
[java]이것이 자바다 부록 Java UI 4 (Swing을 이용한 이벤트 처리) (0) | 2023.02.16 |
[java]이것이 자바다 부록 Java UI 3 (Swing을 이용한 컴포넌트 배치 2) (1) | 2023.02.15 |
[java] 이것이 자바다 부록 Java UI 2 (Swing을 이용한 컴포넌트 배치 1) (0) | 2023.02.15 |