import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table.*;



public class TableDemo06 extends JPanel implements TableModelListener {


    private boolean DEBUG = false;
    JTable mTable;

    public TableDemo06() {
        super(new GridLayout(1,0));

        mTable = new JTable(new MyTableModel());
        mTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
        mTable.setFillsViewportHeight(true);
        mTable.getModel().addTableModelListener(this); // 테이블모델이 변경될 때 fireTableCellUpdated() 에 의해 통보됨

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(mTable);

        //Add the scroll pane to this panel.
        add(scrollPane);
    }

    public void ImageChanged(String strImage, int row) {
        try { // 이미지 파일은 클래스가 포함된 패키지에 위치한다. 즉, 프로젝트 내에 이미지 파일이 있을 때 다음과 같이 로드할 수 있다

            ImageIcon icon = new ImageIcon((Image)ImageIO.read(getClass().getResourceAsStream(strImage)));
            Object a3 = icon;
            mTable.setValueAt(a3, row, 3);
        } catch (IOException ex) {

            ex.printStackTrace();

        }
    }



    // JTable의 셀을 편집하고 엔터를 치면 호출되는 이벤트 핸들러 메소드(TableModelListener)
    public void tableChanged(TableModelEvent e) { // 모델 클래스의 setValueAt() 보다 나중에 호출됨. 
        int row = e.getFirstRow();
        int column = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String columnName = model.getColumnName(column);
        Object data = model.getValueAt(row, column);
        System.out.println("Table Changed:"+data);
        //... Do something with the data...
    }

   

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TableDemo02");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        TableDemo06 newContentPane = new TableDemo06();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);


        newContentPane.ImageChanged("bb.png", 1); //이미지 변경

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                 createAndShowGUI();
            }
        });
    }
}

 

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.sql.Date;
import java.util.Calendar;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.table.*;
class MyTableModel extends AbstractTableModel 
{
    boolean DEBUG = true;
    ImageIcon [] icon = new ImageIcon[6];
    
    private String[] columnNames;
    private Object[][] data;
    MyTableModel() {
        
        BufferedImage image;
        
        try { // 이미지 파일은 클래스가 포함된 패키지에 위치한다. 즉, 프로젝트 내에 이미지 파일이 있을 때 다음과 같이 로드할 수 있다
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[0] = new ImageIcon((Image)image);
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[1] = new ImageIcon((Image)image);
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[2] = new ImageIcon((Image)image);
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[3] = new ImageIcon((Image)image);
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[4] = new ImageIcon((Image)image);
            image = ImageIO.read(getClass().getResourceAsStream("aa.png"));
            icon[5] = new ImageIcon((Image)image);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        columnNames = new String[]{"EMPNO","ENAME","HIREDATE","PICTURE","SELECT"};
        
        Calendar cal = Calendar.getInstance();
        
        data = new Object[5][];
        cal.set(2001, 0, 12);
        data[0] = new Object[]{ 5, "SMITH",new Date(cal.getTimeInMillis()), icon[0], new Boolean(false) };
        cal.set(2002, 2, 16);
        data[1] = new Object[]{ 3, "JONES",new Date(cal.getTimeInMillis()), icon[1], new Boolean(true) };
        cal.set(2003, 3, 21);
        data[2] = new Object[]{ 4, "WARD",new Date(cal.getTimeInMillis()), icon[2], new Boolean(false) };
        cal.set(2005, 5, 24);
        data[3] = new Object[]{ 6, "FORD",new Date(cal.getTimeInMillis()), icon[3], new Boolean(true) };
        cal.set(2010, 9, 27);
        data[4] = new Object[]{ 7, "MARY",new Date(cal.getTimeInMillis()), icon[4], new Boolean(false) };
    }
        
    public int getColumnCount() {
        return columnNames.length;
    }
    public int getRowCount() {
        return data.length;
    }
    public String getColumnName(int col) {
        return columnNames[col];
    }
    // 한개의 셀을 그릴 때마다 호출됨
    public Object getValueAt(int row, int col) {
        //System.out.print("getValueAt("+row+","+col+")");
        return data[row][col];
    }
    /*
     * JTable uses this method to determine the default renderer/
     * editor for each cell.  If we didn't implement this method,
     * then the last column would contain text ("true"/"false"),
     * rather than a check box.
     */
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    /*
     * Don't need to implement this method unless your table's
     * editable.
     */
    public boolean isCellEditable(int row, int col) {
        return col==1 || col==4 ? true : false;
    }
    /*
     * Don't need to implement this method unless your table's
     * data can change.
    */
    // JTable의 셀을 편집하고 엔터를 치면 호출되는 메소드
    public void setValueAt(Object value, int row, int col) {
        System.out.println("테이블모델.setValueAt("+value+","+row+", "+col+")"); 
        if (DEBUG) {
            System.out.println("Setting value at " + row + "," + col
                               + " to " + value
                               + " (an instance of "
                               + value.getClass() + ")");
        }
        data[row][col] = value;
        fireTableCellUpdated(row, col);//모든 리스너에게 셀 데이터 변경을 알린다
        if (DEBUG) {
            System.out.println("New value of data:");
            printDebugData();
        }
    }
    private void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();
        for (int i=0; i < numRows; i++) {
            System.out.print("    row " + i + ":");
            for (int j=0; j < numCols; j++) {
                System.out.print("  " + data[i][j]);
            }
            System.out.println();
        }
        System.out.println("--------------------------");
    }
} // End of MyTableModel class
Posted by pkss
,

JTable에 이미지 넣기

Java 2019. 7. 13. 09:12
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableIcon extends JPanel
{
    public TableIcon()
    {
        Icon aboutIcon = new ImageIcon("about16.gif");
        Icon addIcon = new ImageIcon("add16.gif");
        Icon copyIcon = new ImageIcon("copy16.gif");

        String[] columnNames = {"Picture", "Description"};
        Object[][] data =
        {
            {aboutIcon, "About"},
            {addIcon, "Add"},
            {copyIcon, "Copy"},
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames)
        {
            //  Returning the Class of each column will allow different
            //  renderers to be used based on Class
            public Class getColumnClass(int column)
            {
                return getValueAt(0, column).getClass();
            }
        };
        JTable table = new JTable( model );
        table.setPreferredScrollableViewportSize(table.getPreferredSize());

        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("Table Icon");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TableIcon());
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

}
Posted by pkss
,
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
 
import javax.imageio.ImageIO;
 
/**
 * ImageIOMain.java
 * 자바 1.4 ImageIO를 이용한 이미지 로딩
 * 
 * 자바 1.4 이전에는 JPEG 이미지의 로딩과 저장이 그렇게 쉽지만은 않다. 
 * 자바 1.4에서는 이미지의 관리를 위해 ImageIO 클래스를 제공한다.
 */
 
public class ImageIOMain extends Frame {
    BufferedImage bi = null;
     
    public ImageIOMain(){
        try{
            bi = bufferedImage();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    private BufferedImage bufferedImage() throws Exception{
        //자바 1.4 ImageIO를 이용한 이미지 로딩
        File file = new File("./pororo.jpg");
        BufferedImage bi = ImageIO.read(file);
         
        //자바 1.4 ImageIO를 이용한 이미지 저장
        File file1 = new File("pororo2.png");
        ImageIO.write(bi, "png", file1);
         
        File file2 = new File("pororo2.gif");
        ImageIO.write(bi, "gif", file2);
         
        File file3 = new File("pororo2.jpg");
        ImageIO.write(bi, "jpg", file3);
         
        return bi;
    }
     
    public void paint(Graphics g){
        if(this.bi != null)
            g.drawImage(this.bi, 0, 20, this);
    }
     
    public static void main(String[] args){
        ImageIOMain itm = new ImageIOMain();
        itm.setSize(330, 420);
        itm.setVisible(true);
    }
}

출처: https://goppa.tistory.com/202 [Developer]

Posted by pkss
,