Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:What';生成几个独立GUI的最佳方法是什么?_Java_Image_Swing_Awt - Fatal编程技术网

Java:What';生成几个独立GUI的最佳方法是什么?

Java:What';生成几个独立GUI的最佳方法是什么?,java,image,swing,awt,Java,Image,Swing,Awt,我需要显示多个图像,以便用户可以比较它们,我不确定使用什么方法。我有一个应用程序,允许用户选择图像文件,所以我有一个文件对象。我试图用“new”生成新的GUI,但效果不好 我是否应该编写一个独立的应用程序(带有一个主应用程序)并使用一个系统调用来用一个新的JVM启动它们? 我是Java新手,刚刚接触过AWT和SWING的表面 因此,在名称为任意唯一字符串的情况下调用该类: ImageWindowStub iw = new ImageWindowStub(name); 下面是一段简单的代码,演示

我需要显示多个图像,以便用户可以比较它们,我不确定使用什么方法。我有一个应用程序,允许用户选择图像文件,所以我有一个文件对象。我试图用“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类的多个独立实例的最佳方法是什么?”

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


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

我想我已经找到了答案,但不是我想要的答案,但它似乎很有效。 我添加了一个接受字符串参数的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值。调用程序退出时,显示的帧不会退出,但似乎可以实现此行为。

“我尝试使用
new
生成新的GUI,但效果不好。”。“不好用”是什么意思?您在上叫什么
new
?你可能想创建多个JFramesTime做某事的最佳方式是雇佣一位专家,他会付费倾听你的意见,找出你想要的,然后交付给你。查看并编辑你的问题,包括一个“多个图像,以便用户可以比较”他们是否需要一对一对地显示
JScrollPane
如果可以单独显示,
JList
CardLayout
JTabbedPane
。抱歉,我不够明确。第一个GUI(JFrame)显示正确,后续的GUI是不同的颜色,没有用于最大化、最小化和退出的图标,但有图标“持有者”可见,但位于窗口的另一侧,与Ubuntu的对应位置不同,并且窗口没有标准Ubuntu窗口所具有的圆角上角。我解释这意味着我做得不对。