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

JComboBox从ArrayList-不工作-Java摇摆

拓拔骁
2023-03-14

我仍然在玩Java和秋千(对这一切还是很陌生的)。我试图填充一个JComboBox与数据从. txt文件。我将数据拉入ArrayList,并试图用ArrayList变量填充JComboBox。然而,当我运行应用程序时,组合框是空白的。

这是数组代码:

private ArrayList<String> list = new ArrayList<String>();

文件读取器代码:

private void fileRead(){
         try{
             Scanner scan = new Scanner(new File("Examiner.txt"));
            // ArrayList<String> list = new ArrayList<String>();
             while(scan.hasNext()){
                 list.add(scan.next());
             }
             scan.close();
         }
         catch (FileNotFoundException e){
             e.printStackTrace();
         }
     }

我用来做组合盒的混乱:

 private void comboBoxes(){                
        panel.setBorder(new EmptyBorder(0, 5, 5, 10));
        String[] comboBox1Array = list.toArray(new String[list.size()]);
        JComboBox comboBox1 = new JComboBox(comboBox1Array);          
        panel.add(examinerLabel);
        panel.add(comboBox1);          
        panel.add(viewTeachedCourses);
         JComboBox comboBox2 = new JComboBox();
         panel.add(courseLabel);         
         panel.add(comboBox2); 
         panel.add(viewPrograms);
         add(panel, BorderLayout.LINE_START); 

    }

这个类的整个混乱的代码。

package messing with swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.EmptyBorder;


public class ReportGUI extends JFrame{
    //Fields
    private JButton viewAllReports = new JButton("View All Program Details");
    private JButton viewPrograms = new JButton("View Programs and Majors Associated with this course"); 
    private JButton viewTeachedCourses = new JButton("View Courses this Examiner Teaches"); 
    private JLabel courseLabel = new JLabel("Select a Course: ");
    private JLabel examinerLabel = new JLabel("Select an Examiner: "); 
    private JPanel panel = new JPanel(new GridLayout(6,2,4,4));  
    private ArrayList<String> list = new ArrayList<String>();
    //private String storeAllString="";



     public ReportGUI(){   
       reportInterface();
       allReportsBtn();     
       comboBoxes();
       fileRead();
     }   



     private void fileRead(){
         try{
             Scanner scan = new Scanner(new File("Examiner.txt"));
            // ArrayList<String> list = new ArrayList<String>();
             while(scan.hasNext()){
                 list.add(scan.next());
             }
             scan.close();
         }
         catch (FileNotFoundException e){
             e.printStackTrace();
         }
     }

    private void reportInterface(){         
          setTitle("Choose Report Specifications");                   
          setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          JPanel panel = new JPanel(new FlowLayout());        
          add(panel, BorderLayout.CENTER);
          setSize(650,200);
          setVisible(true);    
          setResizable(false);
          setLocationRelativeTo(null);
}    
    private void allReportsBtn(){
        JPanel panel = new JPanel(new GridLayout(1,1)); 
        panel.setBorder(new EmptyBorder(70, 50, 70, 25));
        panel.add(viewAllReports);        
        viewAllReports.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JFrame AllDataGUI = new JFrame();
                new AllDataGUI();
            }
        });         
        add(panel, BorderLayout.LINE_END);
    }       
    private void comboBoxes(){                
        panel.setBorder(new EmptyBorder(0, 5, 5, 10));
        String[] comboBox1Array = list.toArray(new String[list.size()]);
        JComboBox comboBox1 = new JComboBox(comboBox1Array);          
        panel.add(examinerLabel);
        panel.add(comboBox1);          
        panel.add(viewTeachedCourses);
         JComboBox comboBox2 = new JComboBox();
         panel.add(courseLabel);         
         panel.add(comboBox2); 
         panel.add(viewPrograms);
         add(panel, BorderLayout.LINE_START); 

    }      







}

你知道我哪里出错了吗?

共有2个答案

邢焱
2023-03-14

Taka仔细看看你做事情的顺序。。。

public ReportGUI(){   
   reportInterface();
   allReportsBtn();     
   comboBoxes();
   fileRead();
 }   

首先,您调用reportInterface,它初始化您的框架...

其次,调用allReportsBtn,创建按钮...

第三,您调用comboBox,它将List的内容应用到您的组合框,该组合框是空的...

第四,调用fileRead,它从文件中读取值。。。

您提供给JComboBox的数组与您读取的文件值的列表之间没有关系,因此即使您告诉combobox值已更改,它也不会看到更改

试着做一些更像

public ReportGUI(){   
   reportInterface();
   allReportsBtn();     
   fileRead();
   comboBoxes();
 }   

反而...

端木冷勋
2023-03-14
 public ReportGUI()
 {   
   reportInterface();
   allReportsBtn();     
   comboBoxes();
   fileRead();
 }   

正如奥比切雷所指出的那样:

  1. 首先调用comboBox(),它创建组合框并用空List填充组合框。
  2. 然后调用fileRead()方法,该方法将数据添加到List中,但这不会更新组合框的模型。

代码顺序需要颠倒:

fileRead();
comboBoxes();
 类似资料:
  • < br >我有这段代码,其中我设计了一个< code >可编辑的JComboBox来侦听我的< code>keyPressed事件,并显示一条消息,说明键已被按下。但我不知道为什么这没用。作为初学者,我可能在逻辑上/概念上犯了错误。 因此,我想征求关于如何构建代码的建议,以使其工作。 密码

  • 问题内容: 我做错了此事,或者我不了解这种方法的工作方式。 我本以为suresureCapacity可以让我插入一条记录,该记录的索引不超过该值。有其他方法可以做到这一点吗? 我在第三行收到IndexOutOfBounds错误。 问题答案: 不,不改变 逻辑大小 的-它改变的 能力 ,它的大小列表前,可以在到达下一个需要复制的值。 您需要非常清楚逻辑大小(即范围内的所有值都可以访问,并且添加新元素

  • 问题内容: ArrayList在内部使用什么数据结构? 问题答案: 内部使用。 在向中添加项目时,列表会检查后备阵列是否还有剩余空间。如果有空间,则将新项目添加到下一个空白处。如果没有空间,则会创建一个更大的新阵列,并将旧阵列复制到新阵列中。 现在,还有更多空间,新元素将添加到下一个空白空间。 由于人们真的很喜欢源代码: 直接跳出JDK。

  • 问题内容: 对数组列表中的等效方法有一个疑问,下面的代码将其剪裁为true。 有谁知道它为什么给出真正的答案。 问题答案: 在文档中查找的equals()方法 当且仅当指定对象也是一个列表,并且两个列表具有相同的大小,并且两个列表中所有对应的元素对相等时,才返回true。 由于没有元素,因此满足所有条件。 如果将元素添加到两个列表中( 每个 元素 至少一个 ),以查看所需的输出。

  • 问题内容: 我需要用ArrayList填充JComboBox。有什么办法吗? 问题答案: 使用ArrayList类的方法并将其传递给 有关更多信息,请参见JavaDoc和教程。

  • 主要内容:1 Java JComboBox的介绍,2 Java JComboBox的声明,3 Java JComboBox的构造方法,4 Java JComboBox的方法,5 Java JComboBox的案例1,6 Java JComboBox的案例21 Java JComboBox的介绍 Choice类的对象用于显示选项的弹出菜单。用户选择的选项显示在菜单顶部。它继承了JComponent类。 2 Java JComboBox的声明 我们来看一下javax.swing.JComboBox类