Swing 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼
기본 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼
스윙 텍스트 컴포넌트들 텍스트 필드 일반 텍스트 영역 스타일 텍스트 영역 종류 텍스트 컴포넌트 그림 JTextField JPasswordField JFormattedTextField 일반 텍스트 영역 JTextArea 스타일 텍스트 영역 JEditorPane JTextPane
스윙 텍스트 컴포넌트들
상속 계층 구조
JTextComponent 클래스 컴포넌트가 가진 데이터는 document라고 하는 이름의 인스턴스에 저장된다. document는 MVC에서 모델(Model)에 해당한다. “오려두기”, “복사하기”, “붙이기”, “삽입하기”와 같은 기본적인 텍스트 편집 기능을 제공한다. 이들 기능들은 메뉴와 버튼들과 연결될 수 있다. 단축키 기능을 제공한다. 무제한의 되돌림 기능(undo)과 다시하기 기능(redo)을 제공한다. 교체가능한 카렛과 카렛 변경 리스터와 내비게이션 필터를 제공한다. 문서 필터를 제공한다.
JTextComponent 클래스
JTextComponent 메소드
텍스트 필드
예제 import javax.swing.*; import java.awt.event.*; class MyFrame extends JFrame { private JButton button; private JTextField text, result; public MyFrame() { setSize(300, 130); setTitle("제곱 계산하기"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ButtonListener listener = new ButtonListener(); // 리스너 객체 생성 JPanel panel = new JPanel(); panel.add(new JLabel("숫자 입력: ")); // 레이블 생성 text = new JTextField(15); // 컬럼수가 15인 텍스트 필드 생성 text.addActionListener(listener); // 텍스트 필드에 리스너 연결 panel.add(text); panel.add(new JLabel("제곱한 값: ")); result = new JTextField(15); // 결과를 나타낼 텍스트 필드 result.setEditable(false); // 편집 불가 설정 panel.add(result);
button = new JButton("OK"); button.addActionListener(listener); panel.add(button); add(panel); setVisible(true); } // 텍스트 필드와 버튼의 액션 이벤트 처리 private class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource() == button || e.getSource() == text) { String name = text.getText(); int value = Integer.parseInt(name); result.setText(" " + value * value); text.requestFocus(); public class TextFieldTest extends JFrame { public static void main(String[] args) { new MyFrame();
텍스트 영역 텍스트 영역(TextArea): 여러 줄의 텍스트가 들어 갈 수 있는 컴포넌트
예제 import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyFrame extends JFrame implements ActionListener { protected JTextField textField; protected JTextArea textArea; public MyFrame() { setTitle("Text Area Test"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textField = new JTextField(30); textField.addActionListener(this); textArea = new JTextArea(10, 30); textArea.setEditable(false); add(textField, BorderLayout.NORTH); add(textArea, BorderLayout.CENTER); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { String text = textField.getText(); textArea.append(text + "\n"); textField.selectAll(); textArea.setCaretPosition(textArea.getDocument().getLength()); } public class TextAreaTest extends JFrame { public static void main(String[] args) { new MyFrame();
스크롤 페인 텍스트 영역에 스크롤바를 만들려면 스크롤 페인에 텍스트 영역을 넣어야 한다. textArea = new JTextArea(10, 30); // 텍스트 영역을 생성한다. JScrollPane scrollPane = new JScrollPane(textArea); // ①
체크 박스
JCheckBox의 메소드
예제 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.applet.Applet; import javax.swing.*; class MyFrame extends JFrame implements ActionListener { private JButton buttonOK; private JCheckBox onion, cheese, tomato; public MyFrame() { setTitle("체크박스 테스트"); setSize(300, 130); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("햄버거에 무엇을 추가하시겠습니까?"); JPanel topPanel = new JPanel(); topPanel.add(label); add(topPanel, BorderLayout.NORTH); // 체크 박스 생성 및 추가 JPanel panel = new JPanel(); onion = new JCheckBox("양파"); panel.add(onion); cheese = new JCheckBox("치즈"); panel.add(cheese); tomato = new JCheckBox("토마토"); panel.add(tomato); add(panel, BorderLayout.CENTER); // 버튼 생성 및 추가 buttonOK = new JButton("OK"); JPanel bottomPanel = new JPanel(); bottomPanel.add(buttonOK); add(bottomPanel, BorderLayout.SOUTH); buttonOK.addActionListener(this); setVisible(true); }
예제 public void actionPerformed(ActionEvent e) { if (e.getSource() == buttonOK) { String msg = ""; if (onion.isSelected()) msg += "양파\n"; if (cheese.isSelected()) msg += " 치즈"; if (tomato.isSelected()) msg += " 토마토"; msg = "선택한 옵션은 다음과 같습니다.\n " + msg; System.out.println(msg); onion.setSelected(false); cheese.setSelected(false); tomato.setSelected(false); } public class MyFrameTest extends JFrame { public static void main(String[] args) { new MyFrame();
라디오 버튼
생성자와 메소드 JRadioButton radio1 = new JRadioButton("Small Size“); JRadioButton radio1 = new JRadioButton("Small Size“, true);
그룹핑하기 // 라디오 버튼을 생성한다. JRadioButton radio1 = new JRadioButton("선택 1"); // ButtonGroup 객체를 생성한다. ButtonGroup group = new ButtonGroup(); // 라디오 버튼들을 ButtonGroup 객체에 추가한다. group.add(radio1); group.add(radio2); group.add(radio3);
예제 import javax.swing.*; import javax.swing.border.Border; import java.awt.event.*; import java.awt.*; class MyFrame extends JFrame implements ActionListener { private JRadioButton small, medium, large; private JLabel text; private JPanel topPanel, sizePanel, resultPanel; public MyFrame() { setTitle("라디오 버튼 테스트"); setSize(300, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); topPanel = new JPanel(); JLabel label = new JLabel("어떤 크기의 커피를 주문하시겠습니까?"); topPanel.add(label); add(topPanel, BorderLayout.NORTH);
예제 sizePanel = new JPanel(); small = new JRadioButton("Small Size"); medium = new JRadioButton("Medium Size"); large = new JRadioButton("Large Size"); ButtonGroup size = new ButtonGroup(); size.add(small); size.add(medium); size.add(large); small.addActionListener(this); medium.addActionListener(this); large.addActionListener(this); sizePanel.add(small); sizePanel.add(medium); sizePanel.add(large); add(sizePanel, BorderLayout.CENTER); resultPanel = new JPanel(); text = new JLabel("크기가 선택되지 않았습니다."); text.setForeground(Color.red); resultPanel.add(text); add(resultPanel, BorderLayout.SOUTH); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == small) { text.setText("Small 크기가 선택되었습니다."); } if (e.getSource() == medium) { text.setText("Medium 크기가 선택되었습니다."); if (e.getSource() == large) { text.setText("Large 크기가 선택되었습니다."); public class RadioButtonTest extends JFrame { public static void main(String[] args) { new MyFrame();
경계 만들기
고급 컴포넌트 레이블과 버튼에 이미지 표시 리스트 콤보 박스 스피너 슬라이더 트리 색상선택기및 폰트선택기 메뉴 대화상자 테이블
텍스트와 레이블에 이미지 추가
텍스트와 레이블에 이미지 추가 ImageIcon 인스턴스를 생성하여야 한다. ImageIcon image = new ImageIcon("image.gif"); setIcon() 메소드를 사용 JLabel label = new JLabel("이미지 레이블"); label.setIcon(image);
실행 결과
리스트 리스트(List)는 여러 개의 선택 항목 중에서 하나를 선택하기 위한 컴포넌트이다. 리스트는 한 줄에 하나씩 선택 항목을 나타내며 이 영역은 스크롤이 가능하다. 일반적으로 사용자는 마우스 클릭에 의하여 항목을 선택 더블 클릭이나 엔터 키를 치면 액션 이벤트가 발생한다.
리스트의 메소드
선택 모드 변경 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
리스트이 이벤트 처리
콤보박스
콤보 박스의 메소드
콤보 박스의 이벤트 처리
실행 결과
스피너
슬라이더
트리
트리의 생성 순서
색상 선택기 JColorChooser colorChooser = new JColorChooser(Color.RED);
예제
파일 선택기
파일 선택기 표준 열기 대화상자를 만드는 것은 다음의 문장으로 한다. //파일 선택기를 생성한다. final JFileChooser fc = new JFileChooser(); ... //버튼이 클릭되면 반환된다. int returnVal = fc.showOpenDialog(aComponent);
파일 선택기
메뉴
메뉴 클래스의 상속 계층도
메뉴 생성 순서
대화 상자 대화 상자 윈도우는 임시 정보를 나타내는데 사용되는 독립적인 서브 윈도우이다. 몇 개의 미리 정해진 표준 대화 상자는 아주 간단히 만들 수 있다.
showMessageDialog()
showOptionDialog()
테이블 테이블은 스프레드 쉬트처럼 데이터를 테이블 형식으로 표시하고 사용자가 값을 편집할 수 있는 컴포넌트이다