我创建了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
}
答案 0 :(得分:3)
您可以将Icon/ImageIcon直接放入单元格,因为JTable在Object's type
中知道ColumnClass
,与String, Number, Boolean
和e.i相同。