-1

我需要显示多个图像,以便用户可以比较它们,我不确定使用什么方法。我有一个允许用户选择图像文件的应用程序,所以我有一个文件对象。我尝试使用“new”生成新的 GUI,但效果不佳。

我应该编写一个独立的应用程序(带有主程序)并使用系统调用来使用新的 JVM 启动它们吗?我是 Java 新手,刚刚接触了 AWT 和 SWING 的表面。

因此调用该类,其中 name 是任意唯一的字符串:

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

我想我找到了答案,虽然不是我想要的,但它似乎有效。我添加了一个带有字符串参数的 main:

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();
            }

其中“command”是一个字符串,其中包含可执行 jar 的完全限定路径名加上参数。

到目前为止,我似乎可以创建多个实例来丢弃先前的 p 值。当调用程序退出时,显示的帧不会退出,但似乎可以实现此行为。

于 2012-05-25T15:14:37.173 回答
0

我猜你想要的是内部框架。每个内部框架都有一个 main JPanel,其中包含一个JLabel持有ImageIcon.

您可以平铺或覆盖内部框架,具体取决于您要显示的内容。

于 2012-05-24T16:54:15.120 回答