【问题标题】:Java External class JComboBox missing selectionJava 外部类 JComboBox 缺少选择
【发布时间】:2013-07-08 17:38:46
【问题描述】:

好的,所以在重新考虑了工资计算器的设计之后,我正在尝试将程序模块化为可重用的部分。我首先在一个类中创建一个 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);

    }   


}

【问题讨论】:

    标签: java swing class jframe jcombobox


    【解决方案1】:

    您正在 CreateCombo 内创建另一个 JComboBox ,这不是必需的,因为您的 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 工厂。

    【讨论】:

    • 非常感谢。我使用了 super(array) 并且它有效!我正在创建这个组合框类,认为如果我的程序的另一部分需要一个带有部门列表的组合框,我可以创建这个对象并添加它。
    • 您不必扩展 JComboBox 来执行此操作...您可能想了解一下Factory Pattern :)
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多