【问题标题】:Java: Displaying Array Created From Method In Another ClassJava:显示从另一个类中的方法创建的数组
【发布时间】:2016-02-20 01:26:03
【问题描述】:

尝试将我的按钮附加到 actionListener 以使用从另一个类/方法生成的用户输入的项目数的新随机生成数组填充我的 JTextArea。我可以让它部分运行,但不能完全运行。

我可以通过让按钮创建一个全新的 GUI 窗口来使其工作,但这不是我想要的,我只想将 JTextArea 附加到新生成的数组中。照原样,JTextArea 显示类信息和数组的十六进制代码,仅此而已。

功能:用户在一个框内输入一个整数,该框告诉方法要使用多少项填充数组,单击一个按钮,在清除 JTextArea 后会出现一个随机生成的数组。

我猜(希望)这是一个相当简单的问题。我已经从两个 .java 文件中放入了所有适用的(我认为)代码。

Automobile.java:

//toString method override for formatting
@Override
public String toString() {
    return String.format
        ("   %d\t\t%s\t\t%s\t\t%d\t%1.1fL", invID, make, model, doors, engineSize);
}// end method toString


//This method randomizes the array
public static Automobile[] makeRandom(int m) {
    Automobile[] auto = new Automobile[m];
    for (int i = 0; i < auto.length; i++) {
        auto[i] = new Automobile();
        auto[i].make = carMakes.get(randomGen.nextInt(carMakes.size()));
        auto[i].model = carModels.get(randomGen.nextInt(carModels.size()));
        auto[i].doors = randomGen.nextInt(6);
            if(auto[i].doors == 0 || auto[i].doors == 1)
                auto[i].doors = 2;
        auto[i].engineSize = randomGen.nextDouble() * 6.0;
            if(auto[i].engineSize <= 1.49)
                auto[i].engineSize = 1.5;
    } // end for method to instantiate     
    return auto;
} // end method makeRandom

//Main method for creating the GUI with default number of array entries
public static void main(String args[]) {

Automobile[] x = makeRandom(20);
GUI frame = new GUI(x);
frame.setVisible(true);

}

GUI.java

//Creates the GUI    
public GUI(Automobile[] ia) {
    this.autoArray = ia;
    initComponents();

    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString()+"\n");

    }

    Arrays.sort(autoArray);
    mainTextArea.append("\n\n---- Sorted By Make -----\n");
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Model -----\n");
    Automobile.sortBy = Automobile.SORTBY.MODEL;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Doors -----\n");
    Automobile.sortBy = Automobile.SORTBY.DOORS;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Engine Size -----\n");
    Automobile.sortBy = Automobile.SORTBY.ENGINESIZE;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
}//End GUI constructor

//Method for the button click action
private void randomizeButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                

   int number = Integer.parseInt(numCarsTextField.getText());
   mainTextArea.setText(null);
   Automobile[] x = makeRandom(number);
   mainTextArea.append(x.toString());  
   }

非常感谢一些指导。

谢谢!

添加一些我正在尝试的代码,由@Hovercraft Full Of Eels 建议,这是新方法,但我什至不确定如何处理它,我真的很感谢这里的一些更深入的帮助:

public void appendAutos(Automobile[] cars){

    this.autoArray = cars;
    initComponents();

    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString()+"\n");

    }

    Arrays.sort(autoArray);
    mainTextArea.append("\n\n---- Sorted By Make -----\n");
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Model -----\n");
    Automobile.sortBy = Automobile.SORTBY.MODEL;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Doors -----\n");
    Automobile.sortBy = Automobile.SORTBY.DOORS;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
    mainTextArea.append("\n\n---- Sorted By Engine Size -----\n");
    Automobile.sortBy = Automobile.SORTBY.ENGINESIZE;
    Arrays.sort(autoArray);
    for (Automobile m : autoArray) {
        mainTextArea.append(m.toString() + "\n");
    }
}    

    private void randomizeButtonActionPerformed(java.awt.event.ActionEvent   evt) {                                                

   int number = Integer.parseInt(numCarsTextField.getText());
   mainTextArea.setText(null);
   appendAutos(Automobile[]);

我不确定返回类型应该是什么或如何将用户输入的数字传递给方法,因为有人建议该方法接受数组类型。

【问题讨论】:

  • appendAutos(...) 方法中调用initComponents() 有意义吗?在复制代码之前,请考虑每一行代码的作用。

标签: java arrays swing constructor jtextarea


【解决方案1】:

简单:给 GUI 一个 setAutos(Automobile[] cars)appendAutos(...) 方法,并在此方法中调用您当前在构造函数中执行的自动显示代码。然后从您的 actionPerformed 方法中调用该方法。

【讨论】:

  • 抱歉,您能否再详细说明一下,或许还有一些代码?我想我跟着你,但我试图把所有东西放在一起。谢谢!
  • @bnr32jason:先试试。你已经得到了你写的代码,所以你应该理解它。
  • 但是如何将用户输入的整数传递给您建议的方法 setAutos?我认为我无法理解的是为什么我要从构造函数中提取代码并将其放入一个新方法中,似乎我在做同样的事情,只是以不同的方式。
  • @bnr32jason:有什么令人困惑的地方?在 actionPerformed 中获取 int,调用工厂方法获取自动数组,将数组传递给 setAutos(...) 方法。
  • 我正在尝试,但我改变的越多,它变得越糟糕。我不知道我为什么要为此苦苦挣扎。
猜你喜欢
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2018-07-13
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多