当前位置: 首页 > 知识库问答 >
问题:

打开新jFrame时清空ArrayList

彭建业
2023-03-14

我正在创建一个可以在公司内部轻松工作的子网管理器。现在我有了第一个窗口,在这里我可以添加新的子网--用‘添加子网’按钮。这将带您完成几个步骤。提供子网名、网络地址和子网掩码。

现在,我正在尝试打开第二个jFrame,它从overview页面的JList中打开选定的子网。在这里,我在将前面输入的值放入第二个JFrame的jTextFields中时遇到了问题。它保持为空,在经过调试模式之后,我看到在打开第二个JFrame之后,我的ArrayList再次为空。

线程“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException:Index:0,SIZE:0,位于java.util.ArrayList.RangeCheck(ArrayList.java:653),位于java.util.ArrayList.Get(ArrayList.java:429)

现在,这两个GUI都是独立的java文件(subnetmanager.java和subnetgui.java)。这得益于包含逻辑方法的类子网(.java)。

代码SubnetManager.java:

Subnet n = new Subnet();
private DefaultListModel model = new DefaultListModel();
private int getal;

/**
 * Creates new form SubnetManager
 */
public SubnetManager() {
    initComponents();
}    

/**
 * Opens up the jFrame of SubnetGUI.java with the values of the selected jList value.
 * 
 * @param evt Clickevent 'Change' Button
 */
private void jButtonChangeSubnetActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    //integer 'getal' gets the index of the selected jList value
    getal = jListSubnet.getSelectedIndex();

    //closes jFrame from SubnetManagerGUI
    this.setVisible(false);

    //Opens up the jFrame from SubnetGUI
    SubnetGUI s = new SubnetGUI();
    s.setVisible(true);
}                                                   

/**
 * Gettermethod which provides the index of the selected JList value.
 * 
 * @return index of selected JList value
 */
public int getGetal() {
    return this.getal;
}

代码SubnetGUI.java:

private SubnetManager n = new SubnetManager();
private Subnet s = new Subnet();
private String getal2;

/**
 * Creates new form Subnet
 */
public SubnetGUI() {
    initComponents();
    this.getal2 = s.naamSubnet.get(n.getGetal());
}

public class Subnet {
private String naam, netwerkadres, subnetmask;

//ArrayList which saves the names of the Subnets
public final ArrayList<String> naamSubnet = new ArrayList<String>();

/**
 * Constructor
 */
public Subnet() {

}

/**
 * Constructor
 * @param naam name of subnet
 * @param netwerkadres network address of subnet
 * @param subnetmask subnetmask of subnet
 */
public Subnet(String naam, String netwerkadres, String subnetmask) {
    this.naam = naam;
    this.netwerkadres = netwerkadres;
    this.subnetmask = subnetmask;
}

/**
 * Method to add names of subnets to the ArrayList naamSubnet.
 * 
 * @param antwoord name provided in SubnetManager GUI
 */
public void naamSubnet(String antwoord) {
    naamSubnet.add(antwoord);
}

现在我的问题是,当第二个jFrame打开时,ArrayList怎么可能是空的呢?程序是否重置,我是否需要在SubnetManager.java类中打开一个新的jFrame?还是我在监督这个问题?

共有1个答案

李浩邈
2023-03-14

修复了问题。行处:

private SubnetManager n = new SubnetManager();
private Subnet s = new Subnet();

当你使用“new”时,它会创建一个新的对象。所以我通过在我的逻辑类subnet.java中添加gettermethod并删除这两行来修复它。

 类似资料:
  • 问题内容: 我试图在弹出新框架时禁用“主” 。我想要它,所以您不能在该框架上单击或拖动任何东西。我尝试将新框架设为a ,但这并没有禁用其他框架。我还查看了有关此的另一篇文章,建议将其设置为a,但仍然无法正常工作。我真的需要帮助。谢谢。这是我正在使用的代码,他们有什么问题吗? 代表“主”框架。 问题答案: 您已经设置了JDialog#setModal或JDialog#ModalityTypes,可能

  • 问题内容: 现在的示例中,我有一个包含jtable的主框架,显示所有客户信息,并且有一个create按钮来打开一个新的JFrame,允许用户创建新客户。我不希望用户可以打开多个创建框架。任何swing组件或API都能做到吗?或如何禁用主机?类似于JDialog。 问题答案: 我建议您将新客户对话框设置为模态,以便在应用程序可见时,不允许其他对话框/框架中的输入。请查看模态教程以了解详细信息。

  • 问题内容: 我有一个主JFrame,其中具有用于不同功能的各种面板,人们可以在其中进行计算。我想在用户单击第一个计算按钮时打开一个新的JFrame并用作“输出”窗口(如果您熟悉它们,则类似于SPSS输出窗口)。 New JFrame将是完全独立的,并且将具有其自己的菜单栏。简单的JDialog并不是解决之道。 问题答案: 无法抗拒,简单地不同意答案); 和 我想在用户单击第一个计算按钮时打开一个新

  • 我在网上查看了如何从现有的JFrame打开一个新的JFrame。我发现,最好的方法显然是处理现有的JFrame,然后打开新的JFrame--但这是一个问题。 我有一个登录表单,一个用户登录,登录框架被处理,主框架被设置为可见。 但是,如果用户启动客户端,然后决定不登录并关闭它,则进程仍在后台运行? 我觉得这是一个非常愚蠢的问题,如果是这样,我很抱歉,但我已经四处寻找,找不到任何解决办法。我可以不处

  • EDIT2:测试过了。这无疑是新JPanel的一个问题。 解决方案:正如建议的那样,答案是我忘了明确地将我的JPanel设置到JFrame上。改变: 到 这对我很管用! 我的问题是JFrame的一个奇怪行为。 在我的代码中,我的主机上有一个单选按钮。按下时,会打开另一个框架。 在我的新框架里,我做了一个JPanel。在添加JPanel之前,另一个框架没有冻结,所以我相信问题与新的JPanel有关。

  • 我有一个问题,就是在一次单击一个按钮的过程中处理两个JFrames。我有2个JFrames(SUC_Forms和add_suc),当SUC_Forms中的按钮“Add Records”被点击时,将显示另一个新的JFrame,它是add_suc JFrame,包含注册/归档的文本框。当我按ok验证并插入数据库中的所有数据时,将弹出一个JDialogbox进行确认。当我点击“OK”后,两个JFrame