-1

ユーザーが比較できるように複数の画像を表示する必要がありますが、どの方法を使用すればよいかわかりません。ユーザーが画像ファイルを選択できるようにするアプリがあるので、ファイル オブジェクトがあります。「new」で新しい GUI を生成しようとしましたが、うまくいきません。

スタンドアロン アプリ (メインを使用) をコーディングし、システム コールを使用して新しい JVM で起動する必要がありますか? 私は Java の初心者で、AWT と SWING の表面に触れたばかりです。

このクラスは次のように呼び出されます。名前は任意の一意の文字列です。

ImageWindowStub iw = new ImageWindowStub(name);

連続して呼び出された場合の問題を示す簡単なコードを次に示します。

package fireScience.airborne.image;

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;

public class ImageWindowStub {


private static JFrame frame;
private static JPanel statusPanel;
private static JLabel statPixInfoLbl;

private static String theString;

public ImageWindowStub(String theString) {
    this.theString = theString;
    statusPanel = new JPanel();
    createAndShowGui();

}

private static void createAndShowGui() {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            frame = new JFrame(theString);
            JFrame.setDefaultLookAndFeelDecorated(true);
            frame.setResizable(true);
            frame.setSize(300, 200);
            frame.setLocation(50, 50);
            statusPanel = new JPanel();
            statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
            statusPanel.setPreferredSize(new Dimension(frame.getWidth(), 24));
            statusPanel.setLayout(new BoxLayout(statusPanel,
                    BoxLayout.X_AXIS));
            statPixInfoLbl = new JLabel("Status Bar");
            statPixInfoLbl.setHorizontalAlignment(SwingConstants.LEFT);
            statusPanel.add(statPixInfoLbl);
            frame.add(statusPanel);
            frame.pack();
            frame.setVisible(true);
        }

    });
}

}

私の中心的な質問は、「GUI クラスの複数の独立したインスタンスを生成する最良の方法は何ですか?」です。

4

2 に答える 2

0

私が望んでいたものとはまったく違う答えを見つけたと思いますが、うまくいくようです。文字列引数を取るメインを追加しました:

public static void main(String[] args) {
    if (args.length > 0) {
        ImageWindowStub iws = new ImageWindowStub(args[0]);
    } else {
        ImageWindowStub iws = new ImageWindowStub("Testing: No arg passed");
    }
}

次に、実行可能な jar ファイルをエクスポートし、次のようにインスタンスを作成しました。

            Process p;
            try {
                p = Runtime.getRuntime().exec(command);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

ここで、「コマンド」は、実行可能 jar への完全修飾パス名と引数を含む文字列です。

これまでのところ、p の以前の値を破棄して複数のインスタンスを作成できるようです。表示されたフレームは、呼び出し元のプログラムが終了しても終了しませんが、この動作は実装できるようです。

于 2012-05-25T15:14:37.173 に答える
0

あなたが欲しいのは内部フレームだと思います。各内部フレームには、を保持するJPanelものを含むメインがあります。JLabelImageIcon

表示する内容に応じて、内部フレームを並べて表示またはオーバーレイできます。

于 2012-05-24T16:54:15.120 に答える