10-9로써 자바 Swing 컴포넌트에 대한 튜토리얼을 마치려고 한다. Swing이 AWT에서 업그레이드 된 만큼 커버할 내용이 많은 편이다. 모든 내용을 커버하는 것은 비효율적일 것 같다. 또 지금은 GUI 표준이 JavaFX로 넘어가는 시점이니까 GUI는 JavaFX를 좀 더 눈여겨 봐야 할 것 같다.

 

아래는 체크박스와 라디오버튼 리스트,칼라츄저에 대한 예제이다. 

 

내용은 어렵지 않다. 컴포넌트들은 생성자를 사용해서 생성해야 되고 메인 프레임에 add 추가 시켜야 된다. 레이아웃 관리자가 있어야 하고, 필요한 경우 이벤트처리기(액션리스너)를 활용해서 사용자의 동작에 대응할 수 있어야 한다. 이 모든 것들이 다 객체이고 인터페이스니까, 그런 부분들을 생각하며 작성해야 한다.

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Swing1 extends JFrame implements ActionListener {
Container ctn;

    public Swing1() {
        JCheckBox cb1 = new JCheckBox("Python");
        JCheckBox cb2 = new JCheckBox("Ruby");
        JCheckBox cb3 = new JCheckBox("Java Script");

        JRadioButton rb1 = new JRadioButton("item1");
        JRadioButton rb2 = new JRadioButton("item2");
        JRadioButton rb3 = new JRadioButton("item3");

        String nation[] = {"Korea","Japan","China","America","Russia","한국어"};
        JComboBox cbox = new JComboBox(nation);

        DefaultListModel<String> lt1 = new DefaultListModel<>();
        lt1.addElement("Apple");
        lt1.addElement("Kiwi");
        lt1.addElement("Banana");
        lt1.addElement("Orange");
        lt1.addElement("Strawberry");
        lt1.addElement("Kakao");
        JList<String> list1 = new JList<>(lt1);

        JButton bt1 = new JButton("JCOLOR");
        ctn = getContentPane();
        bt1.addActionListener(this);

        add(cb1);add(cb2);add(cb3);
        add(rb1);add(rb2);add(rb3);
        add(cbox);add(list1);
        setLayout(new FlowLayout());
        setTitle("Swing Ex");add(bt1);
        setLocation(500,100);
        setSize(250,500);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public static void main(String[] args){
        new Swing1();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Color initialcolor =Color.RED;
        Color color=JColorChooser.showDialog(this,"Select a color",initialcolor);
        ctn.setBackground(color);
    }
}

 

*JTable

 

JTable은 JFrame안에 테이블 요소를 구현한다.

 

사용법은 String 이중 배열로 테이블의 내용을 JTable 매개변수에 전달한다. 테이블 답게 행과 열의 순서가 있다. 제목은 별도 문자열로 전달해줘야 한다. 그 다음 JScrollPane에 add한다. 그리고 테이블의 각 요소를 클릭했을시의 이벤트 처리를 등록한다. 테이블도 리스트로 되어 있기 때문에 ListSelectionListener의 메소드를 구현한다.

 

클릭 이벤트가 발생한 열과 행을 특정할 수 있도록 for 루프를 사용한다.

 

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Swing2 extends JFrame {
    Swing2(){
        JLabel lb1 = new JLabel("Blank");
        lb1.setBounds(100, 200, 150, 40);
        add(lb1);

        String myData[][] = {
                {"100","CODE MAN","5,000,000"},
                {"101","JAKE","4,000,000"},
                {"102","YUUKA","3,000,000"},
                {"103","MIRA","2,500,000"},
                {"104","LOVELY GIRL","7,800,000"},
                {"105","OLD NICE GUY","3,400,000"},
                {"106","BAMBADA","3,200,000"},
                {"107","CHICKEN SOUP","4,700,000"},
        };
        String column[] = {"ID","NAME","SALARY"};

        JTable jt1 = new JTable(myData,column);
        jt1.setCellSelectionEnabled(true);
        ListSelectionModel select = jt1.getSelectionModel();
        select.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        select.addListSelectionListener(new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                String Data = null;
                int[] row = jt1.getSelectedRows();
                int[] columns = jt1.getSelectedColumns();

                for(int i = 0; i < row.length; i++) {
                    for(int j=0; j<columns.length; j++) {
                        Data = (String)jt1.getValueAt(row[i], columns[i]);
                    }
                    System.out.println("Table Element you selected : " + Data);
                    lb1.setText(Data);
                }
            }
        });

        jt1.setBounds(30, 30, 150, 200);
        JScrollPane sp1 = new JScrollPane(jt1);
        add(sp1);

        setBounds(300, 300, 500, 500);
        setTitle("Swing GridBag Layout");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new Swing2();
    }
}

 

여기까지가 이 블로그의 Swing GUI 튜토리얼이다. 그래도 AWT보다는 쓸만한 기능이 상당히 많아진 GUI라고 보는데 UI에 관한 시대의 흐름이란게... 강산이 벌써 몇번이나 변하는 시대속에서 살다 보니 어느새 레거시가 되버린 시스템들을 보게 된다. 물론 과거부터 Swing 프레임웤을 이용하는 사람들에겐 여전히 사용되겠지만 새로 뭔가 개발해야 하는 사람들은 새로운 방법을 찾거나 개선하지 않으면 안될 것이다.

 

프로그래머는 평생 공부해야하는 직업이란게 이런 부분때문인 것이다. 새로운 개념 새로운 프레임워크, 그 다음에 일하는 방식은 어떻게 새로워질지 모르겠다. 개인적으로는 인체공학 UI를 통한 코드입력방법이라던가 VR,AR 코딩 같은 것이나 뇌파(Brain Reading) 코딩 같은게 지금은 멀리 보이지만 지난 역사를 돌아보면 불가능해 보이지 않는다.

 

지금의 컴퓨팅 환경은 상상조차 못했던 시절이 어제같다. 역사속에서 이만큼 빨리 기술이 발전할거라는 생각을 사람들은 하지 못했을 것이다. 그냥 우리앞에 주어진 문제를 해결할 뿐.

공유하기

facebook twitter kakaoTalk kakaostory naver band