2012-02-13 16 views
3

これは数百万回表示されていますが、今はまだ問題があるので、今夜は特に濃いと感じるはずです。私の最初の質問は、私が電話したときにこれです。Java JTableがセル内のアイコンを変更しています

ImageIcon icon = new ImageIcon(getClass().getResource("images/x.jpg")); 

ここでイメージフォルダを探していますか?私はそれを私のプロジェクトとsrcの下のフォルダにしようとしました。私は何が欠けていますか?私はEclipseを使用しています。すでに推測したように、私はJavaをあまりやっていません。

私が本当にやりたいことは、テーブルの最初の列を初期アイコンに設定してから、ユーザーがアイコンをダブルクリックして変更できるようにすることです。誰かが私を正しい方向にやさしく押す(または激しく押す)ように親切なことがありますか?私自身のレンダラークラスが必要ですか?

class MyRenderer extends DefaultTableCellRenderer { 
.... 

誰かが行をダブルクリックすると、アイコンがy.jpgに変更されます。

編集 ありがとうございました。もう一つの愚かな疑問。このような行を追加するとアイコンが表示されるはずですか?

DefaultTableModel dm = (DefaultTableModel)tblNews.getModel(); 
ImageIcon icon = new ImageIcon(getClass().getResource("/x.jpg")); 
dm.addRow(new Object[]{icon, "Text"}); 

アイコンのファイル名は表示されますが、アイコン自体は表示されません。

答えて

3

1)自分のイメージアイコンは (new ImageIcon(getClass().getResource("images/x.jpg"));

  • SRC

    • mypackageと

       - MyClass.java 
      
    • mypackageと/画像

      のために配置することができますJavaで
        - x.jpg 
      

よりPackaging

2)JTable knows Icon/ImageIcon Objectとして、そこにプロジェクト内の画像フォルダを作るためにレンダラ

+0

+1へのリンクです。 x.jpgがそこにコピーされているかどうかコンパイルしたクラスフォルダをチェックインするだけです。 – StanislavL

+0

+1のJTable部分:-) –

+0

助けてくれてありがとう。私は元の質問を編集しました。 addRowにアイコンを使用することはできますか? – nickfinity

3

Iconに設定されていない理由は、あなた最初にプロジェクトを右クリックし、Source Folder(フォルダではない)を選択し、このソースフォルダの名前をimagesとします。 File Systemを移動して、手動でこのフォルダに画像を追加します。完了したら、あなたのプロジェクトのRefresh Eclipseに戻り、imagesSource FolderProject Treeに表示することができます。画像にアクセスするために、今すぐ

ImageIconのためにこれを書く:

ImageIcon icon = new ImageIcon(getClass().getResource("/x.jpg")); 

は、最初のフォワードimages Source Folder内部のあなたの実際の画像の前にスラッシュを覚えていますか。今度はプロジェクトを実行してbin folderをチェックすると、あなたのイメージはこのエリアに自動的に追加されます。

このコードを試してみて、私はそれをテストしたし、完璧に動作しています。私はこのコードを使ってJTable内の画像も見ることができます。ここで

package jtable; 

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

public class TableIcon extends JFrame 
{ 
    public TableIcon() 
    { 
     ImageIcon backIcon = getImage("/images/bac.png"); 
     ImageIcon exitIcon = getImage("/images/exit.png"); 
     ImageIcon forwardIcon = getImage("/images/forward.png"); 

     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = 
     { 
      {backIcon, "BACK"}, 
      {exitIcon, "EXIT"}, 
      {forwardIcon, "FORWARD"}, 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) 
     { 
      // 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(); 
      } 
     }; 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

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

    private ImageIcon getImage(String path) 
    { 
     java.net.URL url = getClass().getResource(path); 
     if (url != null) 
      return (new ImageIcon(url)); 
     else 
     { 
      System.out.println(url); 
      return null; 
     } 
    } 

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

が出力されます。

JTable Imageここでは、追加するには私のプロジェクトJTable Project

+0

ご協力ありがとうございます。私はあなたの回答に投票しますが、私はまだ評判はありません。あなたがアイコンではなくファイル名を見ている理由について考えているなら、私はそれを感謝するでしょう。 – nickfinity

+0

@nickfinity:JTableについてよく分かりませんが、いつか私に教えてください。私はチュートリアルを読んで、何かをキャッチすれば教えてくれます。返事が遅れて申し訳ありません。それはあなたが答えた夜の時間でした。 –

+1

@nickfinity:貼り付けたばかりのコードをチェックしてください。これは画像を見るのに役立ちます:-) –

関連する問題