我需要显示多个图像,以便用户可以比较它们,我不知道使用什么方法。我有一个应用程序,允许用户选择图像文件,所以我有一个文件对象。我试图使用“new”生成新的GUI,但效果不佳。
我应该编写一个独立应用程序(使用main)并使用系统调用来使用新的JVM启动它们吗? 我是Java的新手,刚刚触及了AWT和SWING的表面。
因此调用该类,其中name是任意唯一的String:
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类的多个独立实例的最佳方法是什么?”
答案 0 :(得分:0)
我猜你想要的是internal frames。每个内部框架都有一个主JPanel
,其中包含一个JLabel
,其中包含ImageIcon
。
您可以平铺或叠加内部帧,具体取决于您要显示的内容。
答案 1 :(得分: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值。当调用程序执行时,显示的帧不会退出,但似乎可以实现此行为。