2

ツールバーにアイコンを追加しようとしていますが、どこに配置するのが最適ですか? 私のデスクトップ、またはプロジェクトファイルに新しいファイルを作成するか、すべての画像を追加する必要があります。これは、表示されておらず、これが私のコードです:

 JToolBar toolBar = new JToolBar();
     String[] iconFiles = {"pen-icon","",""};
     String[] buttonLabels = {"New","Open","Save"};
     icon = new ImageIcon[iconFiles.length];
     Obutton = new JButton[buttonLabels.length];

     for (int i = 0; i < buttonLabels.length; ++i) {
      icon[i] = new ImageIcon(iconFiles[i]);
      Obutton[i] = new JButton(icon[i]);
      Obutton[i].setToolTipText(buttonLabels[i]);
      if (i == 3)
        toolBar.addSeparator();
         toolBar.add(Obutton[i]);
    }
4

2 に答える 2

6

このタイプのリソースは通常、アプリケーション コンテキスト (jar ファイルなど) 内に含めるのが最適です。これにより、jar ファイルを解凍、変更、再パックしてから単純にファイルを置き換えるのに時間がかかるため、改ざんされる可能性が低くなります。また、自己完結型になるため、配布する必要があるものも減ります。

これらは埋め込みリソースと呼ばれます。

このコンテキスト内でそれらをどこに置くかは次第です。多くの人は「リソース」フォルダーを使用してこれらのタイプのファイルを保存しますが、クラスのコンテキストに関連するものが必要になる場合があります。それはあなた次第です。

などを使用してリソースを参照できなくなるため、これらのリソースをロードする際に問題が発生しますFile

一般にClass#getResource(String)、 aを返すURLまたはClass#getResourceAsStream(String)を返すを使用できますInputStream。これにより、これらの埋め込みリソースをロードするために必要なすべてが提供されます。

ImageIcon(String)値がファイル参照であることを期待します。つまり、埋め込みリソースでは機能しませんが、を参照としてImageIcon受け取るコンストラクターを提供しますURL。これは、使用する必要があることを意味します

icon[i] = new ImageIcon(getClass().getResource(iconFiles[i]));

画像をロードするには。

あなたの例に基づいて、画像はクラスに対して相対的である必要があります(つまり、パッケージ構造と同じディレクトリ構造内)。これを実現する方法は、開発環境によって異なります。

一部のコンテキストでは、相対パスgetResourceや絶対パスを指定することもできます。絶対パスの基本は、リソースを検索するときに、クラスパスの要素を指定されたパスにプレフィックスとして付けます。

于 2014-01-30T03:11:40.387 に答える