passion and relax

[JAVA] 13. 스윙을 알아봅시다 (레이아웃 관리와 구성요소) 본문

프로그래밍

[JAVA] 13. 스윙을 알아봅시다 (레이아웃 관리와 구성요소)

Grab Java 2024. 5. 30. 09:03

Swing

javax.swing.JComponent 를 확장한 것들
컴포넌트 안에 컴포넌트를 넣을 수 있다.
패널 안에 버튼을, 버튼 안에 패널도 넣을 수 있다.

 


GUI를 만들기 위한 4가지

1. JFrame 객체 및 필요한 컴포넌트의 멤버 변수 선언
    JFrame frame;
    JButton button;
2. JFrame 객체 및 필요한 컴포넌트의 인스턴스 생성
    frame = new JFrame();
    button = new JButton("click me");
3. 컴포넌트를 frame의 패널을 얻어 그 패널에 추가
    frame.getContentPane().add (BorderLayout.EAST, button);
4. 화면에 표시
    frame.setSize (300, 300);
    frame.setVisible (true);

Layout

BorderLayout
. Frame의 기본 Layout 이다.
. NORTH, WEST, CENTER, EAST, SOUTH
Flow Layout
. Panel의 기본 Layout 이다.
. 컴포넌트를 연속해서 넣으면, 좌->우로 넣다가 폭이 부족하면, 다음 행에 넣는 layout
BoxLayout
. 컴포넌트를 연속해서 넣으면, 위->아래로 넣다가 높이가 부족하면, 다음 행에 넣는 layout

 


JTextField

JTextField field = new JTextField (20);    //생성자 1 : 20자 넣을 공간
JTextField field = new JTextField ("Your name");    //생성자 2 : 20자 넣을 공간
field.setText("whatever");    //텍스트 넣기
field.addActionListener(myActionListener);    //기본 리스너로 엔터키를 누를 때, ActionEvent.
field.selectAll();    //내용 전체 선택
field.requestFocus();    //커서 포커스 이동

 


JTextArea

JTextArea text = new JTextArea (10, 20);    //10행 20열 처리
text.append ("plus statement");

//스크롤바를 넣는 예제
public class TextArea1 implements ActionListener {

    JFrame frame;
    JPanel panel;
    JTextArea text;
    JButton button;
   
    public void go() {
        frame = new JFrame();
        panel = new JPanel();
        text = new JTextArea(10, 20);
        button = new JButton("click me");
       
        text.setLineWrap(true);
        button.addActionListener(this);
       
        JScrollPane scroller = new JScrollPane(text);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panel.add(scroller);
       
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.getContentPane().add(BorderLayout.SOUTH, button);
       
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(350, 350);
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        text.append("button clicked \n");
    }
   
    public static void main (String[] args) {
        TextArea1 gui = new TextArea1();
        gui.go();
    }
}

 


JCheckBox

JCheckBox check = new JCheckBox("Goes to 11");    //생성자
check.addItemListener (this);    //Item 이벤트 등록
check.setSelected (true);    //코드에서 선택 / 해제 예제

//이벤트 처리 예제
public void itemStateChanged (ItemEvent ev) {
    sout (check.isSelected() ? "on" : "off");
}

JList

String[] listEntries = {"aaa", "bbb", "ccc"};
JList list = new JList(listEntries);

//스크롤바 넣기
        JScrollPane scroller = new JScrollPane(list);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panel.add(scroller);

list.setVisibleRowCount(4);    //스크롤 하기 전에 보여줄 행의 개수
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(this);    //list 이벤트 등록

//이벤트 처리 예제
public void valueChanged (ListSelectionEvent lse) {
    if ( !lse.getValueIsAdjusting() ) {
        String selection = (String) list.getSelectedValue();
        sout (selection);
    }
}