코딩 연습장/JAVA

[명품 자바 프로그래밍] Java 11장 실습 문제

Do아 2021. 4. 8. 18:15
728x90

1. 아래 그림과 같이 2개의 체크박스와 버튼을 하나 만들어라. "버튼 비활성화" 체크박스를 선택하면 버튼이 작동하지 못하게 하고, 해제하면 다시 작동하게 하라. "버튼 감추기" 체크박스를 선택하면 버튼이 보이지 않도록 하고 해제하면 버튼이 보이도록하라.

 

 

 

 

내 풀이

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class Sw11_01 extends JFrame{
	private JButton test_bt;
	
	public Sw11_01() {
		setTitle("실습문제 11강 1번");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		JCheckBox disable_ck = new JCheckBox("버튼 비활성화");
		JCheckBox hide_ck = new JCheckBox("버튼 숨기기");
		
		test_bt = new JButton("test button");
		
		c.add(disable_ck);
		c.add(hide_ck);
		
		c.add(test_bt);
		
		//체크박스에 아이템 선택 리스너 할당
		MyItemListener listener = new MyItemListener();
		MyItemListener1 listener1 = new MyItemListener1();
		disable_ck.addItemListener(listener);
		hide_ck.addItemListener(listener1);
		
		setSize(250, 150);
		setVisible(true);
	}
	
	//버튼 비활성화 체크박스가 선택됐을 때 동작하는 리스너
	class MyItemListener implements ItemListener{
		public void itemStateChanged(ItemEvent e) {
			
			//선택되면 test_bt 비활성화
			if(e.getStateChange() == ItemEvent.SELECTED) {
				test_bt.setEnabled(false);
			}
			//선택되지 않으면 활성화
			else {
				test_bt.setEnabled(true);
			}
		}
	}
	
	//버튼 숨기기 체크박스가 선택됐을 때 동장하는 리스너
	class MyItemListener1 implements ItemListener{
		public void itemStateChanged(ItemEvent e) {
			
			//선택되면 버튼 숨기기
			if(e.getStateChange()== ItemEvent.SELECTED)
				test_bt.setVisible(false);
			//선택되지 않으면 보이게
			else
				test_bt.setVisible(true);
		}
	}
	public static void main(String[] args) {
		new Sw11_01();
	}

}

 

2. 실행 예시와 같이 JComboBox로 빈콤보 박스를 만들고, JTextField 입력 창에 문자열을 입력하고 <Enter> 키를 입력하면 문자열을 콤보박스의 아이템으로 삽입하라.

 

 

 

 

 

내풀이

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Sw11_02 extends JFrame{
	private JTextField tf = new JTextField(10);
	private String v = new String();
	private JComboBox<String> nameCombo = new JComboBox<String>();
	
	public	Sw11_02() {
		
		setTitle("실습문제 2번");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		
		c.add(tf);
		
		// 빈 콤보박스 생성
		c.add(nameCombo);
		
		setSize(300,300);
		setVisible(true);
		
		//textField에 Enter하면 동작하는 리스너(익명 리스너로 할당)
		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				//textField에 들어있는 값을 받아와 콤보박스 항목으로 추가
				JTextField t = (JTextField)e.getSource();
				v = (t.getText());
				t.setText("");
				nameCombo.addItem(v);
				
			}
		});
	}
	
	
	public static void main(String[] args) {
		new Sw11_02();
		
	}
}

 

 

 

 

 

5. 100에서 200까지 조절할 수 있는 수평 슬라이더와 레이블을 하나 만들고 사용자가 슬라이더를 움지깅면 레이블 컴포넌트에 수치로 보여주는 스윙 응용프로그램을 작성하라.

 

 

 

 

 

 

내풀이

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Sw11_05 extends JFrame {
	private JLabel jl = new JLabel("     ");
	
	public Sw11_05() {
		setTitle("실습문제 5번");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		//슬라이더 생성
		JSlider slider = new JSlider(JSlider.HORIZONTAL, 0,200,100);
		slider.setPaintLabels(true);
		slider.setPaintTicks(true);
		slider.setPaintTrack(true);
		slider.setMajorTickSpacing(50);
		slider.setMinorTickSpacing(10);
		c.add(slider);
		
		//라벨에 슬라이더에 값을 받아와 할당
		jl.setText(Integer.toString(slider.getValue()));
		c.add(jl);
		
		//슬라이더가 변하면 동작하는 리스너 할당
		slider.addChangeListener(new MySlider());
		setSize(300,100);
		setVisible(true);
	}
	
	//슬라이더 상태가 변하면 라벨에 재할당 해주는 리스너
	class MySlider implements ChangeListener{
		public void stateChanged(ChangeEvent e) {
			JSlider t = (JSlider) e.getSource();
			jl.setText(Integer.toString(t.getValue()));
		}
	}
	public static void main(String[] args) {
		new Sw11_05();
	}
}
728x90