java组合框选择不会在新窗口中加载/初始化类
请参见底部的更新强>
几天来,我一直在想如何做到这一点,但到目前为止,我一直运气不佳
基本上我想做的是有一个组合框,当选择一个选项时,它将加载一个小程序,并将一个值传递给小程序 下面是ComboBox类的代码,它应该在一个新窗口中打开另一个类。另一个类是小程序的主类。它们都在同一个项目中,但在不同的包中。我知道其余的代码没有任何错误
//where I evaluate the selection and then open SteadyStateFusionDemo
// more selections just showing one code block
combo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
String str = (String)combo.getSelectedItem();
if (str.equals("NSTX")) {
machine = "A";
JFrame frame = new JFrame ("MyPanel2");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
SteadyStateFusionDemo d = new SteadyStateFusionDemo();
frame.getContentPane().add (new SteadyStateFusionDemo());
d.init();
frame.pack();
frame.setVisible (true);
这里要介绍的是SteadyStateFusionDemo的init()方法以及类中的主方法的开始。太多的代码无法发布。在init方法之前,有几个不同的private
//method that initializes Applet or SteadyStateFusionDemo class
public void init() {
//main method of the SteadyStateFusionDemo class
public static void main (String[] args) {
JFrame frame = new JFrame ("MyPanel");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add (new SteadyStateFusionDemo());
frame.pack();
frame.setVisible (true);
我做错了什么?为什么我的课没有负荷
更新:更改了代码,使JFrame打开,然后JApplet加载到其中。我已经在一个测试Java小程序中成功地做到了这一点,但是由于一些奇怪的原因,它不能与这个小程序一起工作。我甚至以类似的方式设置了测试(除了使用不同的类名,当然还有一个非常非常短的init()方法之外,测试的代码实际上是相同的)<有人能帮我弄清楚为什么这不起作用吗?此外,如果我删除引用SteadyStateFusionDemo的行,JFrame将打开,但一旦我引用它,它将不起作用。为什么会发生这种情况强>
# 1 楼答案
更新:
根据您的反馈,您似乎正在努力实现以下目标:
在桌面应用程序(即JFrame)中使用现有小程序(found here)的代码
将小程序转换为桌面应用程序是一项“不可出错”的任务,其复杂性取决于小程序使用了多少“特定于小程序”的内容。它可以像创建JFrame和添加
myFrame.setContentPane(new myApplet().getContentPane());
一样简单,也可以像。。。见鬼This tutorial可能是一个好的起点
在查看了手头的小程序之后,转换它似乎相当容易。唯一复杂的因素是使用
Applet
的方法getCodeBase()
和getImage(URL)
(代码中的某个地方)。如果小程序未部署为。。。小程序因此,您可以做的是重写这两个方法,以返回预期的值(无异常)。代码可能如下所示:
示例JFrame类的完整代码可以在here中找到
当然,您需要让新类可以访问原始小程序中的所有类(例如,将原始小程序放在类路径中)