티스토리 뷰


0. 환경 : 이클립스+JAVA 6을 이용해서 코딩한다.
- 지금 이 GUI 인터페이스를 만드는 목적은 지속적으로 이벤트(메세지)를 발생시키는 프로그램을 만들기 위한 기본 인터페이스를 구축하기 위함이다.
- 함수 설명 안에 있는 링크들은 작동하지 않는다.


1. 시작

  • 프로젝트를 만든다
  • 기본 gui로 사용할 클래스를 만든다. JFrame을 상속받아야한다.
    • class EventFireGui extends JFrame


import javax.swing.JFrame;
 
public class EventFireGui extends JFrame {
 
}

  • 실행할 static main을 포함할 클래스를 만든다. (EventFireGui를 써도 된다)
public class EventFireStarter {
 public static void main(String[] args) {
  new EventFireGui();
 }
}



2. 기본 설정을 한다.

import javax.swing.JFrame;
 
public class EventFireGui extends JFrame {
 
 private static final long serialVersionUID = -711163588504124217L;
 
 public EventFireGui() {
  super("Event Firer");
   
  setBounds(100 , 100 , 300 , 200);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
 }
}
  • void java.awt.Window.setBounds(int x , int y , intn width , int height) : 위치와 크기를 설정.

  • void javax.swing.JFrame.setDefaultCloseOperation(int operation) : 닫기 버튼 눌렀을때 어떻게 할지 설정.
  • void java.awt.Window.setVisible(boolean b) : 보일지 말지 설정



3. Panel을 넣고 그 안에 버튼을 넣는다.


import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class EventFireGui extends JFrame {
 
 private static final long serialVersionUID = -711163588504124217L;
 
 public EventFireGui() {
  super("Event Firer");
  
  setBounds(100 , 100 , 300 , 200);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  Container contentPane = this.getContentPane();
  JPanel pane = new JPanel();
  JButton buttonStart = new JButton("Start");
  buttonStart.setMnemonic('S');
  
  pane.add(buttonStart);
  contentPane.add(pane);

  
  setVisible(true);
 }
}
 

  • void javax.swing.AbstractButton.setMnemonic(char mnemonnic) : 단축키를 설정






4. Label과 text field를 넣는다.


import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class EventFireGui extends JFrame {
 
 private static final long serialVersionUID = -711163588504124217L;
 
 public EventFireGui() {
  super("Event Firer");
  
  setBounds(100 , 100 , 300 , 200);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  Container contentPane = this.getContentPane();
  JPanel pane = new JPanel();
  JButton buttonStart = new JButton("Start");
  JTextField textPeriod = new JTextField(5);
  JLabel labelPeriod = new JLabel("Input period : ");

  
  buttonStart.setMnemonic('S');
  
  pane.add(buttonStart);
  pane.add(labelPeriod);
  pane.add(textPeriod);

  contentPane.add(pane);
  
  setVisible(true);
 }
}



4. Check box를 추가하고 이벤트를 넣는다.
-
체크박스가 체크되면 텍스트 입력을 비활성화하고 텍스트를 설정한다. 체크를 없애면 다시 활성화한다.
- 이벤트 함수를 설정하는 곳의 인자에서 바로 new 로 리스너를 추가하는 경우 지역 변수를 접근하려면 final로 바꿔줘야한다. 대안으로 JTextField변수를 클래스의 멤버 변수로 빼주는 방법이 있다. (개인적으로는 다른 함수에서도 자주 사용하는 값이면 멤버 변수로 빼주는거 선호.)


import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

 
public class EventFireGui extends JFrame {
 
 private static final long serialVersionUID = -711163588504124217L;
 
 public EventFireGui() {
  super("Event Firer");
  
  setBounds(100 , 100 , 300 , 200);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  Container contentPane = this.getContentPane();
  JPanel pane = new JPanel();
  JButton buttonStart = new JButton("Start");
  final JTextField textPeriod = new JTextField(5);
  JLabel labelPeriod = new JLabel("Input period : ");
  JCheckBox checkboxIsRandom = new JCheckBox("Fire randomly");
  
  checkboxIsRandom.addChangeListener(new ChangeListener() {
   
   @Override
   public void stateChanged(ChangeEvent e) {
    if(((JCheckBox)e.getSource()).isSelected())
    {
     textPeriod.setText("Random");
     textPeriod.setEnabled(false);
    }else
    {
     textPeriod.setText("");
     textPeriod.setEnabled(true);
    }
   }
  });
  
  buttonStart.setMnemonic('S');
  
  pane.add(buttonStart);
  pane.add(labelPeriod);
  pane.add(textPeriod);
  pane.add(checkboxIsRandom);
  contentPane.add(pane);
  
  setVisible(true);
 }
}

 

  • void javax.swing.AbstractButton.addChangeListener(ChangeListener l) : 상태가 변하면 처리할 리스너를 추가

  • Object java.util.EventObject.getSource() : 이벤트가 일어난 개체를 리턴

  • boolean javax.swing.AbstractButton.isSelected() : 체크박스가 체크 되었는지 여부를 리턴

  • void javax.swing.text.JTextComponent.setText(String t) : 텍스트 필드의 값을 설정

  • void javax.swing.JComponent.setEnabled(boolean enabled) : 개체의 활성/비활성를 설정




끝.

- 다음에는 레이아웃에 대하여 알아보자.




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함