0

好的,所以在重新考虑了工资计算器的设计之后,我试图将程序模块化为可重用的部分。我首先在一个类中创建一个 JComboBox,将其添加到我在另一个类中创建的 JFrame,然后在我的 main 中调用 JFrame。

当我单独测试我的组合框时,它起作用了。但是,当我在一个类中创建它并将它添加到窗口类时,我丢失了我添加的字符串数组。有什么想法我哪里出错了吗?

我的主要课程:

import javax.swing.*;
import java.awt.*;


  public class WindowTesting 
  {

         public static void main(String[] args) {

             CreateWindow gui = new CreateWindow();
             gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

             CreateCombo deptBox = new CreateCombo();


         }

  } 

我的窗口课

import javax.swing.*;
import java.awt.*;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author bsmith624
 */


public class CreateWindow extends JFrame {

        public CreateWindow() {

        JFrame frame1;

        CreateCombo box1 = new CreateCombo();

        frame1 = new JFrame("Department Combo Box");
        frame1.setSize(400,200);
        frame1.add(box1);
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setVisible(true);

     }

}

最后是我的 JComboBox 类:

import javax.swing.*;
import java.awt.*;




public class CreateCombo extends JComboBox {

    public static String [] deptList = {"Marketing","IT","Accounting","Development","Payroll","Facilities"};


    /**Creates the combo box 
     * with department names
     */
    public CreateCombo () {

        JComboBox combo = new JComboBox (deptList);
        combo.setVisible(true);

    }   


}
4

1 回答 1

1

您正在您的内部创建另一个 JComboBox CreateCombo,这不是必需的,因为您CreateComboJComboBox

你必须设置模型

public CreateCombo () {
        super(); // this call JComboBox superConstructor is implicit if you don't put it
        this.setModel(new DefaultComboBoxModel(depList));
        this.setVisible(true);
} 

或者可能是一个更好的设计是制作这个构造函数

public CreateCombo(Object[] array ){
          super(array);
  }

我不太确定你的设计,我认为你必须审查它,你有一个 CreateCombo 类,它是一个 JComboBox 可能你不想要这个,可能你只想要一个 JComboBox 工厂。

于 2013-07-08T17:40:44.023 回答