有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    更新
    根据您的反馈,您似乎正在努力实现以下目标:
    在桌面应用程序(即JFrame)中使用现有小程序(found here)的代码


    将小程序转换为桌面应用程序是一项“不可出错”的任务,其复杂性取决于小程序使用了多少“特定于小程序”的内容。它可以像创建JFrame和添加myFrame.setContentPane(new myApplet().getContentPane());一样简单,也可以像。。。见鬼
    This tutorial可能是一个好的起点


    在查看了手头的小程序之后,转换它似乎相当容易。唯一复杂的因素是使用Applet的方法getCodeBase()getImage(URL)(代码中的某个地方)。如果小程序未部署为。。。小程序

    因此,您可以做的是重写这两个方法,以返回预期的值(无异常)。代码可能如下所示:

    /* Import the necessary Applet entry-point */
    import ssfd.SteadyStateFusionDemo;
    
    /* Subclass SSFD to override "problematic" methods */
    SteadyStateFusionDemo ssfd = new SteadyStateFusionDemo() {
        @Override
        public URL getCodeBase() {
            /* We don't care about the code-base any more */
            return null;
        }
    
        @Override
        public Image getImage(URL codeBase, String imgPath) {
            /* Load and return the specified image */
            return Toolkit.getDefaultToolkit().getImage(
                    this.getClass().getResource("/" + imgPath));
        }
    };
    ssfd.init();
    
    /* Create a JFrame and set the Applet as its ContentPane */
    JFrame frame = new JFrame();
    frame.setContentPane(ssfd);
    
    /* Configure and show the JFrame */
    ...
    

    示例JFrame类的完整代码可以在here中找到


    当然,您需要让新类可以访问原始小程序中的所有类(例如,将原始小程序放在类路径中)