如何在JTable中获取Image图标

时间:2012-01-30 10:55:18

标签: java swing jtable

我创建了JTable。我从DB获得值到JTable。我在点击行时遇到问题它显示图像图标路径。无法显示图像。我如何设置图像。

我还有两个图像1.指针图像2.空白图像在运行时默认情况下第一行中的指针图像,之后我点击第5行,第一行应设置为空白图像,第5行应设置指针图像。我不知道它在DefaultCellRender中的可能性。

package ex10012012;

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;


public class frame10012012 extends javax.swing.JFrame {

   private DefaultTableModel TmpFlxMdl;
   private TableColumn TmpFlxColumn;
   private int TmpRow,TmpFlxDRow;
   private TableColumn TmpFlxCol;
   private Statement TmpFlxSt=null;
   private ResultSet TmpFlxDRs=null;
   GENLMODL TmpGenModl= new GENLMODL();
   FrmM01011 TmpFrmM0101 = new FrmM01011();

   public frame10012012() {
        initComponents();            
    }                           

    private void FlxDMouseClicked(java.awt.event.MouseEvent evt) {                                  

            if( evt.getClickCount()==2)
            {
                setVisible(false);
                FlxD.setRowSelectionAllowed(true);
                int row=FlxD.getSelectedRow();
                int modelRow = FlxD.convertRowIndexToModel(row);
                Object oc=  FlxD.getModel().getValueAt(modelRow, 1);
                String TempStr=oc.toString();
                TmpFlxMdl =(DefaultTableModel)FlxD.getModel();
                try{
                                 }
                catch(Exception e){
                 System.out.println(e);
               }
               TmpFrmM0101.setVisible(true);

           }
           else{
                FRM_FLXD_PTR_DATA_ASSGN(FlxD.getSelectedRow());                             
         }    
    }

    public void Frm_FlxD_Database() {
           try{
           TmpRow=0;
           TmpGenModl.PRJ_DB_CONNECTION_ASSGN();
           TmpFlxMdl =(DefaultTableModel)FlxD.getModel();
           TmpFlxDRow = 2;

           TmpFlxSt=TmpGenModl.GContcn.createStatement();
           TmpFlxDRs=TmpFlxSt.executeQuery("SELECT * from ActivityMaster");
           PRJ_FLX_DEFTL_ASSGN(FlxD, "BEGIN");
           TmpFlxDRs.first();
           do {
              FlxD.setValueAt(TmpFlxDRs.getString("ActvtyDesc"), TmpRow,1);
              FlxD.setValueAt(TmpFlxDRs.getString("ActvtyCode"), TmpRow,2);
              FlxD.setValueAt(TmpFlxDRs.getString("ActvtyDispStatus"), TmpRow,3);
              FlxD.setValueAt(TmpFlxDRs.getString("ActvtyId"), TmpRow,4);
              TmpFlxMdl.addRow(new Object[]{""});
              TmpRow = TmpRow + 1;
           }while(TmpFlxDRs.next());
            FRM_FLXD_PTR_DATA_ASSGN(TmpFlxDRow);
    }
        catch(Exception e){
            System.out.println(e);
        }
    }

    private void PRJ_FLX_DEFTL_ASSGN(JTable PFlx, String POptnStr){
            int TmpRow;
            DefaultTableModel TmpFlxMdl = new DefaultTableModel();
            TmpFlxMdl = (DefaultTableModel) PFlx.getModel();

            if (POptnStr == "BEGIN") {               
               for (TmpRow=2; TmpRow<=TmpFlxMdl.getRowCount(); TmpRow++) {
                   TmpFlxMdl.removeRow(TmpRow);
               }

            }else if(POptnStr == "END"){
                  TmpRow = TmpFlxMdl.getRowCount();
                  TmpFlxMdl.removeRow(TmpRow);
            }
   }

   private void FRM_FLXD_PTR_DATA_ASSGN(int PFlxRow) {
           //System.out.println(TmpFlxDRow);
           TmpFlxDRow = PRJ_FLX_PTR_ASSGN(FlxD, PFlxRow, TmpFlxDRow);
   }

    private int PRJ_FLX_PTR_ASSGN(JTable PFlx, int PCurRow, int PPrvRow){
            ImageIcon TmpIcon;
            System.out.println(PCurRow);
            System.out.println(PPrvRow);

            if (PCurRow != PPrvRow){
               TmpIcon = new ImageIcon(getClass().getResource("Blank.gif"));
               PFlx.setValueAt(PCurRow,0);
            }
            TmpIcon = new ImageIcon(getClass().getResource("Pointer.gif"));
            PFlx.setValueAt(TmpIcon, PCurRow,0);

            return(PCurRow);
    }
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                   frame10012012 TmpFrame= new frame10012012();
                   TmpFrame.Frm_FlxD_Database();
                    TmpFrame.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton CmdAdd;
    private javax.swing.JButton CmdBack;
    private javax.swing.JButton CmdDelete;
    private javax.swing.JTable FlxD;
    private javax.swing.JLabel Lbl01;
    private javax.swing.JLabel Lbl02;
    private javax.swing.JRadioButton Rbtn01;
    private javax.swing.JTextField Txt01;
    private javax.swing.JTextField Txt02;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration
}

1 个答案:

答案 0 :(得分:3)

您可以将Icon/ImageIcon直接放入单元格,因为JTableObject's type中知道ColumnClass,与String, Number, Boolean和e.i相同。