개발속이야기/Java

JTable 재정의 예제

스토리지기 2017. 12. 28. 15:53

package com.oraclejava.exam3;


import javax.swing.JComponent;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableCellEditor;

import javax.swing.table.TableCellRenderer;


public class MyTable extends JTable {

public MyTable(DefaultTableModel tm) {

super(tm);

}

MyTableCellRender render1 = new MyTableCellRender(); // 

MyTableCellRender2 render2 = new MyTableCellRender2(); // 이미지등

MyTableCellEditor editor1 = new MyTableCellEditor();

@Override

public TableCellEditor getCellEditor(int row, int column) {

// TODO Auto-generated method stub

//return super.getCellEditor(row, column);

TableCellEditor editor;

Object obj = this.getValueAt(row, column);

if(obj instanceof JComponent) {

editor = editor1;

}

else {

editor = super.getCellEditor(row, column);

}

return editor;

}



@Override

public TableCellRenderer getCellRenderer(int row, int column) {

// TODO Auto-generated method stub

//return super.getCellRenderer(row, column);

TableCellRenderer render;

Object obj = this.getValueAt(row, column);

if(obj instanceof JComponent) {

render = render2;

}

else {

render = render1;

}

return render;

}

}

---------------------------------------------------------------------------------------

package com.oraclejava.exam3;


import java.awt.Color;

import java.awt.Component;


import javax.swing.JTable;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.TableCellRenderer;


public class MyTableCellRender extends DefaultTableCellRenderer {


@Override

public Component getTableCellRendererComponent(

JTable table, Object value, boolean isSelected, boolean hasFocus,

int row, int column) {

// TODO Auto-generated method stub

super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

System.out.println(

"row:"+row+",column:"+column+",column:"+column+

",selected:"+isSelected+",focused:"+hasFocus+

",value:"+value

);

// 선택한행을 red로

if(isSelected) {

this.setBackground(Color.RED);

}

else

{

this.setBackground(table.getBackground());

}

// 포커스 맞춘 셀은 노란색으로 변경

if(hasFocus) {

this.setBackground(Color.YELLOW);

}

// (1,1)셀은 파랑으로 변경

if(row==1 && column==1) {

this.setBackground(Color.BLUE);

}

return this;

}

}

---------------------------------------------------------------------------------------

package com.oraclejava.exam3;


import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;


import javax.swing.JComponent;

import javax.swing.JTable;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.TableCellRenderer;


public class MyTableCellRender2 extends DefaultTableCellRenderer {


//행높이

private int rowHeight = 0;

@Override

public Component getTableCellRendererComponent(

JTable table, Object value, boolean isSelected, boolean hasFocus,

int row, int column) {

// TODO Auto-generated method stub

super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

JComponent comp = (JComponent)value;

//가장 긴 컴포넌트의 맞춰 행의 높이를 조절

Dimension dimension = comp.getPreferredSize();

if(rowHeight < dimension.getHeight()) {

rowHeight = dimension.height;

table.setRowHeight(rowHeight);

}

return comp;

}

}

---------------------------------------------------------------------------------------

package com.oraclejava.exam3;


import java.awt.Component;


import javax.swing.AbstractCellEditor;

import javax.swing.JComponent;

import javax.swing.JTable;

import javax.swing.table.TableCellEditor;


public class MyTableCellEditor extends AbstractCellEditor 

implements TableCellEditor {

protected JComponent comp = null;


@Override

public Object getCellEditorValue() {

// TODO Auto-generated method stub

return comp;

}


@Override

public Component getTableCellEditorComponent(JTable table, Object value, boolean arg2, int arg3, int arg4) {

// TODO Auto-generated method stub

comp = (JComponent)value;

return comp;

}


}

---------------------------------------------------------------------------------------
package com.oraclejava.exam3;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;


public class JaFrm8 extends JFrame {

private static final String[] HEADER = { "이름", "생년월일", "성별" };
public JaFrm8(String sTitle) {
setTitle(sTitle);
setBounds(10,10,370,800);
DefaultTableModel tm = new DefaultTableModel(HEADER, 0/*row count*/);
MyTable jTable = new MyTable(tm);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.setPreferredSize(new Dimension(350, 700));
JPanel jPanel = new JPanel();
jPanel.add(jScrollPane);
add(jPanel, BorderLayout.CENTER);
Object[][] data = {
{"홍길순", "19520202", "Female",},
{"홍길동", "19530124", "male", },
{"홍길찬", "19620226", "male", },
{"홍길영", "19541205", "Female", },
{"홍길선", "19651152", "Female", },
};
// 행추가
for(int i=0; i<data.length; i++) {
tm.addRow(data[i]);
}
// 열추가
tm.addColumn("사진");
ImageIcon ico = new ImageIcon("moon.jpg");
JLabel label = new JLabel(ico);
tm.setValueAt(label, 0, 3);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true); // 마지막에
}

public static void main(String[] args) {
// TODO Auto-generated method stub
JaFrm8 frm = new JaFrm8("JTable");

}
}


'개발속이야기 > Java' 카테고리의 다른 글

jdbc with JTable 예제  (0) 2017.12.28
jdbc 기본 예제  (0) 2017.12.28
JTable DefaultTableCellRenderer 예제  (0) 2017.12.28
JTable 예제  (0) 2017.12.28
JFrame 이미지 선택 테스트  (0) 2017.12.28