2012-02-01 3 views
1

jtable 고정 열에서 imageIcon을 설정하는 프로그램을 만들었습니다. jtable을 만들고 데이터베이스 레코드를 얻은 다음 첫 번째 열은 고정 열로 표시됩니다. 고정 된 열에 이미지 아이콘을 설정합니다. 이 프로그램을 컴파일 할 때 이미지를 얻지 못하는 이미지의 경로 만 표시됩니다. 프로젝트 패키지 폴더에 imageIcon을 수정했습니다.jtable 고정 열에 대한 이미지 설정 방법, 실행 중일 때 이미지 경로 만 가져옴

This is the code i used 

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

       TmpFlxSt=TmpGPrjVarDec.GContn.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("DISPSTATUS"), 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 FRM_FLXD_PTR_DATA_ASSGN(int PFlxRow) { 
      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(TmpIcon,PPrvRow,0); 
       System.out.println(TmpIcon); 
      } 
      TmpIcon = new ImageIcon(getClass().getResource("Pointer.gif")); 
      PFlx.setValueAt(TmpIcon,PCurRow,0); 
      System.out.println(TmpIcon);    
      return(PCurRow); 
    } 

답변

3

JTable 내가는 getColumnClass를 설정하는 방법 내가, 넷빈즈를 사용하여 JFrame의하고 있어요 간단한 예를

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableIcon extends JFrame implements Runnable { 

    private static final long serialVersionUID = 1L; 
    private JTable table; 
    private JLabel myLabel = new JLabel("waiting"); 
    private int pHeight = 40; 
    private boolean runProcess = true; 
    private int count = 0; 

    public TableIcon() { 
     ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon"); 
     ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon"); 
     ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon"); 
     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = {{errorIcon, "About"}, {infoIcon, "Add"}, {warnIcon, "Copy"},}; 
     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     table = new JTable(model) { 

      private static final long serialVersionUID = 1L; 
      // Returning the Class of each column will allow different 
      // renderers to be used based on Class 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table.setRowHeight(pHeight); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane, BorderLayout.CENTER); 
     myLabel.setPreferredSize(new Dimension(200, pHeight)); 
     myLabel.setHorizontalAlignment(SwingConstants.CENTER); 
     add(myLabel, BorderLayout.SOUTH); 
     EventQueue.invokeLater(new Runnable() { 

      public void run() { 
      } 
     }); 
     new Thread(this).start(); 
    } 

    public void run() { 
     while (runProcess) { 
      try { 
       Thread.sleep(750); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        ImageIcon myIcon = (ImageIcon) table.getModel().getValueAt(count, 0); 
        String lbl = "JTable Row at : " + count; 
        myLabel.setIcon(myIcon); 
        myLabel.setText(lbl); 
        count++; 
        if (count > 2) { 
         count = 0; 
        } 
       } 
      }); 
     } 
    } 

    public static void main(String[] args) { 
     TableIcon frame = new TableIcon(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.setLocation(150, 150); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

, Icon/ImageIcon 알고있다. 그걸 설명해 주겠니? – javasi

+0

@javasi 미안 Java Desktop Top Application이라고 불리는 스윙 프레임 워크를 사용하지는 않았지만, 코드 에디터 EDIT가 있어야하고, 데이터베이스에서 Swing으로 데이터를 가져 오기 위해 ResulsetTableModel 또는 TableFromDatabase를 검색하십시오. – mKorbel

1

데이터 모델에 아이콘을 추가하면 안됩니다. 데이터 (부울 표시기, String 등)를 추가하고이 열에 렌더러를 사용하여 열의 데이터를 기반으로 적절한 아이콘을 표시해야합니다.

셀 렌더러에 대한 정보 및 예제는 http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender을 참조하십시오.

그리고 Java 명명 규칙을 배우고 따르십시오. 코드를 읽을 수 없습니다. http://www.oracle.com/technetwork/java/codeconv-138413.html

1

코드에 많이 들지 않으면 제 생각에 테이블 모델 getColumnClass() 메소드와 관련이 있습니다. 많은 튜토리얼을 수정하는 방법이 있습니다. 현재 테이블의 defaultrenderer에 의해 렌더링됩니다.

This thread should be helpful to you.

좋은 소식은 코드를 이해하기가 어렵다는 것입니다. 실제로는 읽기가 어렵고 이해하기가 더 어렵습니다. 코드를 개선하기 위해 일부 Java 코드 지침을 읽는 것이 좋습니다.