티스토리 뷰

development/Java

[Java] JFrame #2 예제

Happyoon ~ 2021. 11. 16. 19:12
728x90
반응형

예제 1

- 프레임 생성하고 나타나도록 설정하기

- 창 종료 시 프로세스 종료되도록 설정하기

 

MyFrame.java

package test.frame;

import javax.swing.JFrame;

public class MyFrame extends JFrame{
	
	
	//run했을 때 실행 순서가 시작되는 main 메소드
	public static void main(String[] args) {
		MyFrame f = new MyFrame(); 
		f.setSize(800,500);
		f.setLocation(100,100);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

예제 2

버튼 만들고 버튼 추가하기 

MyFrame2.java

package test.frame;

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame2 extends JFrame{
	//생성자
	public MyFrame2() {
		setSize(800,500);
		setLocation(100,100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setLayout(new FlowLayout(FlowLayout.LEFT));
		//버튼을 만들어서 
		JButton btn1 = new JButton("버튼1");
		JButton btn2 = new JButton("버튼2");
		JButton btn3 = new JButton("버튼3");
		
		
		add(btn1);
		add(btn2);
		add(btn3);
		setVisible(true);

	}
	
	
	//run했을 때 실행 순서가 시작되는 main 메소드
	public static void main(String[] args) {
		MyFrame2 f = new MyFrame2(); 
		
		
	}
}

예제 3

FlowLayout 객체 생성하고 버튼 추가하기

 

MyFrame3.java

package test.frame;

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame3 extends JFrame{
   //생성자
   public MyFrame3() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      //FlowLayout 객체 전달하기
      setLayout(new FlowLayout(FlowLayout.LEFT));
      //버튼을 만들어서 
      JButton btn1=new JButton("버튼1");
      JButton btn2=new JButton("버튼2");
      JButton btn3=new JButton("버튼3");
      
      //프레임에 추가하기 
      add(btn1);
      add(btn2);
      add(btn3);
      
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame3();
   }
}

예제 4

BorderLayout 프레임에 버튼 추가하기

 

MyFrame4.java

package test.frame;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame4 extends JFrame{
   //생성자
   public MyFrame4() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      //FlowLayout 객체 전달하기
      setLayout(new BorderLayout());
      //버튼을 만들어서 
      JButton btn1=new JButton("버튼1");
      JButton btn2=new JButton("버튼2");
      JButton btn3=new JButton("버튼3");
      JButton btn4=new JButton("버튼4");
      
      //프레임에 추가하기 
      add(btn1, BorderLayout.NORTH);
      add(btn2, BorderLayout.WEST);
      add(btn3, BorderLayout.EAST);
      add(btn4, BorderLayout.SOUTH);
      
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame4();
   }
}

예제 5

전송, 삭제, 버튼을 만들고 각각 액션 이벤트 리스너 만들기 

MyFrame5.java

package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame5 extends JFrame{
   //생성자
   public MyFrame5() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      setLayout(new FlowLayout());
      
      JButton sendBtn = new JButton("전송");
      add(sendBtn);
      JButton deleteBtn = new JButton("삭제");
      add(deleteBtn);
      JButton updateBtn = new JButton("수정");
      add(updateBtn);
      
      //ActionListener 인터페이스 type의 참조값 얻어내기 
      ActionListener Listener = new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("전송합니다.");
			
		}
	};
	
      
      //전송 버튼이 눌러졌을 때 특정 객체의 특정 메소드가 호출되게 하는 방법은?
      sendBtn.addActionListener(Listener);
      
      deleteBtn.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("삭제합니다.");
			
		}
      });
      
      updateBtn.addActionListener((e)->{
    	  System.out.println("수정합니다.");
      });
      
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame5();
   }
}

예제 6

예제5를 수정하여 버튼에 action command 설정하고 하나의 액션 이벤트 리스너에서 분기하기

 

MyFrame6.java

package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame6 extends JFrame implements ActionListener{
   //생성자
   public MyFrame6() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      setLayout(new FlowLayout());
      
      JButton sendBtn = new JButton("전송");
      add(sendBtn);
      JButton deleteBtn = new JButton("삭제");
      add(deleteBtn);
      JButton updateBtn = new JButton("수정");
      add(updateBtn);
      
      //버튼에 리스너 등록하기
      sendBtn.addActionListener(this);
      deleteBtn.addActionListener(this);
      updateBtn.addActionListener(this);
      //버튼에 action command 설정하기
      sendBtn.setActionCommand("send");
      deleteBtn.setActionCommand("delete");
      updateBtn.setActionCommand("update");
    
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame6();
   }
//ActionListener 인터페이스를 구현해서 강제로  Override 한 메소드 
@Override
public synchronized void actionPerformed(ActionEvent e) {
	//이벤트가 발생한 버튼에 설정된 action command 읽어오기
	String command = e.getActionCommand();
	
	if(command.equals("send")) {
		System.out.println("전송합니다.");
		
	}else if(command.equals("delete")) {
		System.out.println("삭제합니다.");
		
	}else if(command.equals("update")){
		System.out.println("수정합니다.");
		
	}
	
}
}

예제 7

- JTextField로 입력칸에 문자열을 입력하고, 전송버튼 누르면 입력한 문자열을 알림창으로 띄우기

- 삭제 버튼 누르면 입력한 입력칸의 내용 리셋하기

MyFrame8.java

package test.frame;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyFrame8 extends JFrame implements ActionListener{
   
   //필드정의하기
   private JTextField InputMsg;
   //생성자
   public MyFrame8() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      //FlowLayout 객체 전달하기
      setLayout(new FlowLayout());
      
      //문자열을 잉력할 수 있는 UI의 참조값을 필드에 저장하기
      InputMsg = new JTextField(10);

      //전송버튼
      JButton sendBtn = new JButton("전송");
      sendBtn.setActionCommand("send");
      sendBtn.addActionListener(this);
      
      
      //삭제버튼
      JButton deleteBtn = new JButton("삭제");
      deleteBtn.setActionCommand("delete");
      deleteBtn.addActionListener(this);
      
      //패널 객체를 생성해서 
      JPanel panel = new JPanel();
      //패널에 UI를 추가하고
      panel.add(InputMsg);
      panel.add(sendBtn);
      panel.add(deleteBtn);
      //패널 째로 프레임에 추가하기
      add(panel);
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame8();
   }
   //ActionListener 인터페이스를 구현해서 강제로  Override 한 메소드 
   @Override
   public void actionPerformed(ActionEvent e) {
	//이벤트가 발생한 버튼에 설정된 action command 읽어오기
	   String command = e.getActionCommand();
	   
	   if(command.equals("send")) {
		//JTextField 에 입력한 문자열 읽어오기
		   String msg = InputMsg.getText();
		   JOptionPane.showMessageDialog(this,msg);
	   }else if(command.equals("delete")) {
		   
		   InputMsg.setText("");
		   
		   
	   }
	}
}

예제 8

- JList 사용하기

- keyEventListener 사용하여 엔터 누르면 입력되도록 만들기 

 

MyFrame9.java

package test.frame;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import test.dao.MemberDao;

public class MyFrame9 extends JFrame implements ActionListener, KeyListener{
   //필요한 필드 정의하기 
   private JTextField inputName;
   private DefaultListModel<String> model;
   private JList jList;
   //생성자
   public MyFrame9() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      //BorderLayout 객체 전달하기
      setLayout(new BorderLayout());
      
      //페널에 추가할 UI 를 미리 만든다.
      JLabel label=new JLabel("추가할 이름입력");
      inputName=new JTextField(10);
      JButton addBtn=new JButton("추가");
      addBtn.setActionCommand("add");
      addBtn.addActionListener(this);
      //삭제 버튼 
      JButton deleteBtn=new JButton("삭제");
      deleteBtn.setActionCommand("delete");
      deleteBtn.addActionListener(this);
      
      
      //페널에 UI 를 추가하고 
      JPanel topPanel=new JPanel();
      topPanel.add(label);
      topPanel.add(inputName);
      topPanel.add(addBtn);
      topPanel.add(deleteBtn);
      
      //페널째로 프레임의 상단에 추가하기
      add(topPanel, BorderLayout.NORTH);
      
      //목록을 출력할 UI 
      jList=new JList<>();
      //JList 에 출력할 데이터를 가지고 있는 모델 객체 
      model=new DefaultListModel<>();
      model.addElement("김구라");
      model.addElement("해골");
      model.addElement("원숭이");
      
      
      
      
      model.addElement("번호: 1, 이름: 김구라, 주소: 노량진");
      //모델을 JList 에 연결하기 
      jList.setModel(model);
      
      //스크롤 페널에 JList 넣어주기
      JScrollPane sc=new JScrollPane(jList,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
      
      //프레임에 스크롤 페널 추가하기 
      add(sc, BorderLayout.CENTER);
      
      //JTextField 에 키 리스너 등록하기 
      inputName.addKeyListener(this);
      
      setVisible(true);
   }
   
   //run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new MyFrame9();
   }
   
   //ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드 
   @Override
   public void actionPerformed(ActionEvent e) {
      //이벤트가 발생한 버튼에 설정된 action command 읽어오기 
      String command=e.getActionCommand();
      if(command.equals("add")) {
         //JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다. 
         String name=inputName.getText();
         model.addElement(name);
         inputName.setText("");
      }else if(command.equals("delete")) {
         //JList 의 메소드를 이용해서 선택된 행을 알아낸다.
         int index=jList.getSelectedIndex();
         //만일 선택된 인덱스가 있다면 
         if(index >= 0) {
            //모델에서 해당 인덱스를 삭제한다. 
            model.remove(index);
         }
         
      }
   }

   @Override
   public void keyPressed(KeyEvent e) {
      //눌러진 키의 코드값을 읽어와서 
      int code=e.getKeyCode();
      //엔터키의 코드값인지 확인한다. 
      if(code == KeyEvent.VK_ENTER) {//만일 엔터키를 눌렀다면
         //JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다. 
         String name=inputName.getText();
         model.addElement(name);
         inputName.setText("");
      }
      
   }

   @Override
   public void keyReleased(KeyEvent e) {
      //System.out.println("keyReleased");
   }

   @Override
   public void keyTyped(KeyEvent e) {
      //System.out.println("keyTyped");
   }
}

예제 9

DB와 연결하여 MemberDao와 MemberDto를 활용하여 수정, 삭제 시 DB에도 적용되도록 프로그래밍하기

 

MemberFrame_answer.java

package test.frame;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/*
 *  1. 실제 DB 에 있는 회원 정보를 JList 에 출력해 보세요.
 *  
 *  2. 이름과 주소를 각각의 JTextField 에 입력한후 추가 버튼을 누르면 DB 에 실제로 추가도 되고
 *     JList 의 내용도 업데이트 되도록 해 보세요.
 *     
 *  3. 특정 row 를 선택한 상태에서 삭제 버튼을 누르면 DB 에서 실제로 삭제도되고 
 *     JList 의 내용도 업데이트 되도록 해보세요. 
 *     
 *   - hint 
 *   MemberDao 객체를 활용하세요. 
 *   
 *   DefaultListModel 객체의 .clear() 메소드를 호출하면 모델데이터가 전체 삭제된다. 
 *   
 *   JList 의 내용을 업데이트 하려면
 *   모델객체의 .clear() 메소드를 호출후 다시 전체 데이터를 .addElement() 하면된다. 
 */
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import test.dao.MemberDao;
import test.dto.MemberDto;

public class MemberFrame_answer extends JFrame implements ActionListener{
   //필요한 필드 
   private JTextField inputName, inputAddr;
   private DefaultListModel<String> model;
   private JList<String> jList;
   private List<MemberDto> members;
   //생성자
   public MemberFrame_answer() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      //BorderLayout 객체 전달하기
      setLayout(new BorderLayout());
      
      //회원목록을 출력할 JList
      jList=new JList<>();
      //JList 에 출력할 데이터를 가지고 있는 모델
      model=new DefaultListModel<>();
      //모델을 JList 에 연결
      jList.setModel(model);
      
      //스크롤 페널에 JList 넣어주기
      JScrollPane sc=new JScrollPane(jList,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
      
      //프레임에 스크롤 페널 추가하기 
      add(sc, BorderLayout.CENTER);
      
      //회원 목록 출력하기
      showMembers();
      
      //필요한 UI 객체를 생성해서 
      JLabel labelName=new JLabel("이름");
      JLabel labelAddr=new JLabel("주소");
      inputName=new JTextField(10);
      inputAddr=new JTextField(10);
      JButton addBtn=new JButton("추가");
      JButton deleteBtn=new JButton("삭제");
      //페널에 추가한 후 
      JPanel topPanel=new JPanel();
      topPanel.add(labelName);
      topPanel.add(inputName);
      topPanel.add(labelAddr);
      topPanel.add(inputAddr);
      topPanel.add(addBtn);
      topPanel.add(deleteBtn);
      //프레임의 상단에 페널을 배치한다.
      add(topPanel, BorderLayout.NORTH);
      //버튼에 리스너 등록
      addBtn.addActionListener(this);
      deleteBtn.addActionListener(this);
      //버튼에 action command 설정
      addBtn.setActionCommand("add");
      deleteBtn.setActionCommand("delete");
      setVisible(true);
   }
   
   public static void main(String[] args) {
      new MemberFrame_answer();
   }
   //회원 정보를 추가하는 동작 
   public void addAction() {
      //1. 입력한 이름과 주소를 읽어온다.
      String name=inputName.getText();
      String addr=inputAddr.getText();
      //2. DB 에 저장한다.
      MemberDto dto=new MemberDto();
      dto.setName(name);
      dto.setAddr(addr);
      //작업의 성공여부를 리턴 받는다. 
      boolean isSuccess=new MemberDao().insert(dto);
      
      if(isSuccess) {
         JOptionPane.showMessageDialog(this, "저장 했습니다.");
         //모델을 clear 하고 
         model.clear();
         showMembers();
      }else {
         JOptionPane.showMessageDialog(this, "저장 실패!");
      }
   }
   //회원 정보를 삭제하는 동작
   public void deleteAction() {
      //선택한 row 의 인덱스를 읽어온다. 
      int index=jList.getSelectedIndex();
      if(index == -1)return; //만일 선택한 row 가 없다면 메소드를 여기서 끝내라 
      /*
       *  특정 회원의 정보를 정확히 삭제 하려면 회원의 primary key 값 
       *  즉 회원의 번호를 얻어와야 한다. 
       *  어떻게 얻어오기??
       */
      System.out.println("index:"+index);
      //삭제할 회원의 번호 
      int num=members.get(index).getNum();
      //MemberDao 객체를 이용해서 DB 에서 삭제한다.
      new MemberDao().delete(num);
      //화면 업데이트
      model.clear();
      showMembers();
   }
   //회원목록을 출력하는 메소드 
   public void showMembers() {
      members=new MemberDao().getList();
      for(MemberDto tmp:members) {
         //출력할 문자열을 구성
         String info="번호:"+tmp.getNum()+", 이름:"+tmp.getName()+" 주소:"+tmp.getAddr();
         //구성된 문자열을 JList 에 연결된 모델에 추가하기
         model.addElement(info);
      }
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      String command=e.getActionCommand();
      if(command.equals("add")) {
         addAction();
      }else if(command.equals("delete")) {
         deleteAction();
      }
   }
}

예제 10

JTable 사용하여 위의 예제 풀기

MemberFrame2.java

package test.frame;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
/*
 *  1. 실제 DB 에 있는 회원 정보를 JList 에 출력해 보세요.
 *  
 *  2. 이름과 주소를 각각의 JTextField 에 입력한후 추가 버튼을 누르면 DB 에 실제로 추가도 되고
 *     JList 의 내용도 업데이트 되도록 해 보세요.
 *     
 *  3. 특정 row 를 선택한 상태에서 삭제 버튼을 누르면 DB 에서 실제로 삭제도되고 
 *     JList 의 내용도 업데이트 되도록 해보세요. 
 *     
 *   - hint 
 *   MemberDao 객체를 활용하세요. 
 *   
 *   DefaultListModel 객체의 .clear() 메소드를 호출하면 모델데이터가 전체 삭제된다. 
 *   
 *   JList 의 내용을 업데이트 하려면
 *   모델객체의 .clear() 메소드를 호출후 다시 전체 데이터를 .addElement() 하면된다. 
 */
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import test.dao.MemberDao;
import test.dto.MemberDto;

public class MemberFrame2 extends JFrame implements ActionListener,PropertyChangeListener{
   //필요한 필드 
   private JTextField inputName, inputAddr;
   private List<MemberDto> members;
   private JTable table;
   private DefaultTableModel model;
   //생성자
   public MemberFrame2() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      //BorderLayout 객체 전달하기
      setLayout(new BorderLayout());
      
      //필요한 UI 객체를 생성해서 
      JLabel labelName=new JLabel("이름");
      JLabel labelAddr=new JLabel("주소");
      inputName=new JTextField(10);
      inputAddr=new JTextField(10);
      JButton addBtn=new JButton("추가");
      JButton deleteBtn=new JButton("삭제");
      //페널에 추가한 후 
      JPanel topPanel=new JPanel();
      topPanel.add(labelName);
      topPanel.add(inputName);
      topPanel.add(labelAddr);
      topPanel.add(inputAddr);
      topPanel.add(addBtn);
      topPanel.add(deleteBtn);
      //프레임의 상단에 페널을 배치한다.
      add(topPanel, BorderLayout.NORTH);
      //버튼에 리스너 등록
      addBtn.addActionListener(this);
      deleteBtn.addActionListener(this);
      //버튼에 action command 설정
      addBtn.setActionCommand("add");
      deleteBtn.setActionCommand("delete");
      
      //표형식으로 정보를 출력하기 위한 JTable
      table=new JTable();
      //테이블의 칼럼명을 String[] 로 준비하기
      String[] colNames= {"번호", "이름", "주소"};
      //테이블에 출력할 데이터를 가지고 있는 DefaultTableModel
      model=new DefaultTableModel(colNames, 0) {
    	  //인자로 전달되는 행(row), 열(column) 수정 가능 여부를 리턴하는 메소드
    	  @Override
    	  public boolean isCellEditable(int row, int column) {
    		  //0번 칼럼만 수정 불가능하도록 false를 리턴
    		  if(column ==0) return false;
    		  //나머지는 모두 수정 가능하도록 true를 리턴 
    		  else return true;
    	  }
    	  
      };
      //모델을 테이블에 연결
      table.setModel(model);
      //스크롤이 가능하도록 
      JScrollPane sc=new JScrollPane(table);
      //프레임의 가운데에 배치
      add(sc, BorderLayout.CENTER);
      //테이블에 회원 목록 출력하기
      showMembers();
      //테이블 셀에 수정 작업이 일어났는지 감시할 리스너 등록 
      table.addPropertyChangeListener(this);
      setVisible(true);
   }
   
   public static void main(String[] args) {
      new MemberFrame2();
   }
   //회원 정보를 추가하는 동작 
   public void addAction() {
      //1. 입력한 이름과 주소를 읽어온다.
      String name=inputName.getText();
      String addr=inputAddr.getText();
      //2. DB 에 저장한다.
      MemberDto dto=new MemberDto();
      dto.setName(name);
      dto.setAddr(addr);
      //작업의 성공여부를 리턴 받는다. 
      boolean isSuccess=new MemberDao().insert(dto);
      
      if(isSuccess) {
         JOptionPane.showMessageDialog(this, "저장 했습니다.");
         //행의 갯수를 강제로 0으로 만들고
         model.setRowCount(0);
         //다시 출력하기
         showMembers();
      }else {
         JOptionPane.showMessageDialog(this, "저장 실패!");
      }
   }
   //회원 정보를 삭제하는 동작
   public void deleteAction() {
	   //선택된 row의 인덱스를 얻어와서 
	   int index = table.getSelectedRow();
	   if(index ==-1)return;
	   //DB에서 삭제하고
	   new MemberDao().delete(members.get(index).getNum());
	   //다시 출력
	   model.setRowCount(0);
	   showMembers();
   }
   //회원목록을 출력하는 메소드 
   public void showMembers() {
      //DB 에서 회원 목록을 얻어와서 
      members=new MemberDao().getList();
      for(MemberDto tmp:members) {
         //테이블 row 에 출력할 데이터를 순서대로 담은 Object[] 객체를 준비해서 
         Object[] row= {tmp.getNum(), tmp.getName(), tmp.getAddr()};
         //모델에 추가한다. 
         model.addRow(row);
      }
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      String command=e.getActionCommand();
      if(command.equals("add")) {
         addAction();
      }else if(command.equals("delete")) {
         deleteAction();
      }
   }

	@Override
	public void propertyChange(PropertyChangeEvent evt) {
		if(evt.getPropertyName().equals("tableCellEditor")) {
			//선택된 row의 index를 얻어와서
			int index = table.getSelectedRow();
			//인덱스에 해당하는 model에서 입력된 이름과 주소를 읽어온다.
			int num = (int)model.getValueAt(index, 0);//0번째 인덱스의 번호를 읽어온다.
			String name = (String)model.getValueAt(index,1);//1번째 인덱스의 이름을 읽어온다.
			String addr = (String)model.getValueAt(index,2);//2번째 인덱스의 주소를 읽어온다.
			//DB에 수정 반영
			MemberDto dto = new MemberDto(num,name,addr);
			new MemberDao().update(dto);
		}
	}
}

 

 

반응형

'development > Java' 카테고리의 다른 글

[Java] 쓰레드 Thread  (0) 2021.11.16
[Java] JFrame #1  (0) 2021.11.16
[Java] Java template 만들기  (0) 2021.11.13
[Java] JDBC #2 DAO  (0) 2021.11.13
[Java] JDBC #1 / DB 연결, SELECT, INSERT, DELETE, UPDATE, DTO  (1) 2021.11.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함