JTable만 제대로 하시려면 하루가 걸릴듯 싶네요....이전 강좌에서 JTable에 필요한 구성요소를 살펴드렸으니 개별적으로 java Tutorial을 참고하여 공부하시구요...

우리는 우리가 배운 내용에 추가하여 원하는 작업을 해보도록 하겠습니다.

원래는 TableModel하위 객체를 만들어서 작업하는 것이 특정 셀을 선택하지 못 하도록 막거나 하는 일등을 작업하기 수월하지만 우리가 배운대로 작업 하시는것도 웬만한 작업은 수행하실 수 있지않을까 합니다.

 

JTable의 셀을 선택했을때 새로운 창이 뜨도록 작업하려고 합니다. 우선 테이블의 셀을 클릭했을때 현재 위치를 읽어낼 수 있어야 할 것입니다.

JTable에 이벤트를 붙여서 클릭할때 선택한 셀의 행번호, 열번호, 셀의 값등을 가져오는 작업을 해보도로 하겠습니다.

클릭을 할 경우 대부분 MouseEvent가 발생됩니다. 따라서 리스너는 MouseListener를 구현하도록 작성해야 합니다.

따로 리스너를 작성해도 되지만 바로 작업을 해보도록 하겠습니다.

 

<<적용방법>>

1. MouseListener를 구현합니다.

public class JTableCellEventTest extends JFrame implements MouseListener {

 

}

 

2. MouseListener에 있는 모든 메소드를 오버라이딩하고 mouseClicked메소드에 다음과 같은 코드를 적용합니다.

  - getSelectedRow() : JTable에서 선택한 셀의 row값을 int로 반환하는 메소드입니다.

  - getSelectedColumn() : JTable에서 선택한 셀의 column값을 int로 반환하는 메소드입니다.
  - getModel() : JTable이 갖고 있는 데이터를 담고 있는 객체인 TableModel객체가 리턴됩니다.

  - TableModel의 getValueAt(row,col) : 지정한 row와 column번호에 해당하는 셀의 값을 리
                                                     턴합니다.

  - getColumnCount() : JTable에 뿌려진 모든 데이터의 컬럼 수를 계산하여 int형으로 리턴합니
                                다.

JTable에서 row와 column의 index는 모두 0번 부터 시작합니다.

 @Override
 public void mouseClicked(MouseEvent e) {
   int row = table.getSelectedRow();
  int col = table.getSelectedColumn();
  for (int i = 0; i < table.getColumnCount(); i++) {
   System.out.print(table.getModel().getValueAt(row,i )+"\t"); 
  }

 }

 @Override
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseEntered(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseExited(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 

3. 첨부된 소스를 실행하면 다음과 같은 결과가 나타납니다.

이 코드는 DB에 있는 데이터를 select해서 뿌려주는 작업이니 적절하게 수정하여 작업합니다.

 

위의 결과 화면에서 "홍길동"이 입력된 셀을 클릭하면 다음과 같은 결과가 그 행의 모든 컬럼이 for문에 의해서 다음과 같이 출력됩니다.

 

package gui.advanced;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import jdbc.MemberDAO;

public class JTableCellEventTest extends JFrame   implements MouseListener {
 DefaultTableModel model;
 JTable table; 
 Vector data = new Vector();
 Vector<String> colName = new Vector<String>();
 public JTableCellEventTest(String title){
  super(title);
  display();
  startEvent();
  setSize(400,150);
  setVisible(true);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  
 }
 public void dataSetting(){
  colName.add("아이디");
  colName.add("패스워드");
  colName.add("성명");
  colName.add("주소");
  colName.add("메모");
  colName.add("등록일");
  colName.add("경력여부");
  colName.add("예약하기");
 }
 public void showAllData(){
  MemberDAO dao = new MemberDAO();
  data = dao.selectTable();

  model.setDataVector(data, colName);
 }
 public void display(){
  Container c = getContentPane();
  
  dataSetting();
  
  model = new DefaultTableModel(data, colName);
  showAllData();
  table = new JTable(model);
  table.getColumnModel().getColumn(7).setPreferredWidth(150);
  //ListSelectionModel.SINGLE_SELECTION은 행의 선택을 여러개 할 수 없고
  //하나의 행만 선택할 수 있도록 지정합니다. 
  //아래 코드를 주석 처리한 후 ctrl이나 shift를 누르고 row를 선택하면
  //여러개의 행을 선택할 수 있습니다.
  table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  
  JScrollPane scroll = new JScrollPane(table);
  c.add(scroll,BorderLayout.CENTER);
 }

 public void startEvent(){
  table.addMouseListener(this);
 }
 public static void main(String[] args){
  JTableCellEventTest obj = new JTableCellEventTest("테이블연습");
 }

 

 @Override
 public void mouseClicked(MouseEvent e) {
  int row = table.getSelectedRow();
  int col = table.getSelectedColumn();
  for (int i = 0; i < table.getColumnCount(); i++) {
   System.out.print(table.getModel().getValueAt(row, i )+"\t"); 
  } }

 @Override
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseEntered(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseExited(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }
}
​

 

JTableCellEventTest.java
0.00MB

+ Recent posts