이번에는 메인클래스안에서 처리하는 방법이다.

MyFrame 클래스에서 스윙을 상속받고 리스너 인터페이스까지 사용한다.




MyFrame

 

import javax.swing.*;

import java.awt.event.*;

 

public class MyFrame extends JFrame implements ActionListener

{

    private JPanel panel;

    private JButton b1;

    private JButton b2;

    private JLabel l1;

    private JTextField t1;

    private JTextField t2;

   

 

    public MyFrame()

    {       

         this.setSize(300, 150);

         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         this.setTitle("연습~");

         panel = new JPanel();

         b1 = new JButton("원의 둘레");

         b2 = new JButton("원의 면적");

         l1 = new JLabel("반지름의 길이를 입력해주세요:");

         t1 = new JTextField(5);

         t2 = new JTextField(10);        

         b1.addActionListener(this); //현재 객체를 리스너로 등록하였다.

         b2.addActionListener(this);        

         panel.add(l1);

         panel.add(t1);

         panel.add(b1);

         panel.add(b2);

         panel.add(t2);

         this.add(panel);

         this.setVisible(true);

    }    

   

    public void actionPerformed(ActionEvent e)

    {

        double d;

       

        if(e.getSource()==b1)

        {

            d = Double.parseDouble(t1.getText());

            t2.setText(Double.toString(d *3.14));

        }

        else if(e.getSource()==b2)

        {

            d = Double.parseDouble(t1.getText());

            t2.setText(Double.toString(d *d * 3.14));

        }

    }

}

Posted by 아몰라
이번에는 내부클래스로 만들어서 해보았다.




클래스 하나가 MyFrame으로 들어왔다...

Action클래스가 MyFrame클래스안에 들어옴으로써 private변수들 때문에 만들었던 get set 함수가 필요없어졌다.

외부클래스의 멤버변수들을 자유롭게 사용한다.


MyFrame

public class MyFrame extends JFrame

{

    private JPanel panel;

    private JButton b1;

    private JButton b2;

    private JLabel l1;

    private JTextField t1;

    private JTextField t2;

   

 

    public MyFrame()

    {       

         this.setSize(300, 150);

         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         this.setTitle("연습~");

         panel = new JPanel();

         b1 = new JButton("원의 둘레");

         b2 = new JButton("원의 면적");

         l1 = new JLabel("반지름의 길이를 입력해주세요:");

         t1 = new JTextField(5);

         t2 = new JTextField(10);        

         b1.addActionListener(new MyActionHandler());

         b2.addActionListener(new MyActionHandler());        

         panel.add(l1);

         panel.add(t1);

         panel.add(b1);

         panel.add(b2);

         panel.add(t2);

         this.add(panel);

         this.setVisible(true);

    }

   

    Private class MyActionHandler  implements ActionListener
{       

 

   

    public void actionPerformed(ActionEvent e)

    {

        double d;

       

        if(e.getSource()==b1)

        {

            d = Double.parseDouble(t1.getText());

            t2.setText(Double.toString(d *3.14));

        }

        else if(e.getSource()==b2)

        {

            d = Double.parseDouble(t1.getText());

            t2.setText(Double.toString(d *d * 3.14));

        }

    }

   

}

   

}


Posted by 아몰라





 프로그램설명 - 반지름의 값을 적고...원 둘레와 원의 면적 버튼을 누를시 아래 텍스트필드에 그 값이 나오게 하여라.


1. 먼저 이벤트는 어떠한 행동을 하였을때 발생하는 액션리스너를 이용하였다.

2. 액션리스너를 상속받는 클래스는 외부클래스로 두었다.(이 밖에 내부클래스로 사용하는법과 그 안에 메인클래스에 함수로 사용하는법 세가지가 있다.)

3. 그리하여 총 3개의 클래스로 만들었다.

MyFrame클래스 - 스윙을 이용하여 GUI 환경의 컴포넌트들을 만들고 이벤트를 등록한다.

MyActionHandle 클래스 - 이벤트 발생시 발생되는 행동들이 실행하는 클래스.

MyFrameTest클래스 - 프로그램을 시작한다.




MyActionHandle

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class MyActionHandler  implements ActionListener //액션인터페이스를 사용

{

    private MyFrame f;  

   

    public MyActionHandler(MyFrame f) //포인터로 MyFrame클래스를 가져온다.

    {

        this.f = f;

    }   

    public void actionPerformed(ActionEvent e)

    {

        double d;       

        if(e.getSource()==f.getButton())

        {

            d = Double.parseDouble(f.getTextField());

            f.setTextField(d *3.14);

        }

        else if(e.getSource()==f.getButton2())

        {

            d = Double.parseDouble(f.getTextField());

            f.setTextField(d*d*3.14);

        }

    }   

}

MyFrame

import javax.swing.*;

 

public class MyFrame extends JFrame //JFrame을 상속받는다.

{

    private JPanel panel;

    private JButton b1;

    private JButton b2;

    private JLabel l1;

    private JTextField t1;

    private JTextField t2;

 

    public JButton getButton(){ //MyFrameprivate 변수로 인해 get set 함수만들기

            return b1;

        }       

    public JButton getButton2(){

            return b2;

        }       

    public String getTextField(){

            return t1.getText();

        }   

    public void setTextField(Double d){

            t2.setText(Double.toString(d));

    }     

 

    public MyFrame()

    {       

         setSize(300, 150);

         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         setTitle("연습~");

         panel = new JPanel();

         b1 = new JButton("원의 둘레");

         b2 = new JButton("원의 면적");

         l1 = new JLabel("반지름의 길이를 입력해주세요:");

         t1 = new JTextField(5);

         t2 = new JTextField(10);        

         MyActionHandler han = new MyActionHandler(this); //리스너클래스 생성

         b1.addActionListener(han); //리스너등록

         b2.addActionListener(han);        

         panel.add(l1);

         panel.add(t1);

         panel.add(b1);

         panel.add(b2);

         panel.add(t2);

         add(panel);

         setVisible(true);

    }    

}

 

MyFrameTest

public class MyFrameTest

{

    public static void main(String[] args)

    {

        MyFrame my = new MyFrame();

    }

}


Posted by 아몰라