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

Split String从文本文件中读取,传入ArrayList,然后显示在JComboBox-JavaSwing中

郑波
2023-03-14

我试图从文本文件中提取某些单词,并将它们显示在JComboBox中。我试图使用SplitString()方法,但它似乎不起作用。

目前文本文件是这样的。

课程代码-课程描述-考官-主持人

我试图分裂它,所以JComboBox只会显示:

课程代码-课程描述

这是我正在使用的代码(请原谅混乱和缺乏最佳实践,我是新手,正在努力学习)。

package messingwithswing;

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 viewTaughtCourses = 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> nameList = new ArrayList<String>(); 
    private ArrayList<String> courseList = new ArrayList<String>();  


     public ReportGUI(){   
            reportInterface();
            allReportsBtn();     
            examinnerFileRead();
           // courseFileRead();
            comboBoxes();
     }        

     private void examinnerFileRead(){
         try{
             Scanner scan = new Scanner(new File("Course.txt"));

             while(scan.hasNextLine()){
                 String getname = scan.nextLine();
                 String[] names = getname.split("-");
                 courseList.add(scan.nextLine());
                 String name = names[0];
                 String course = names[1];    

             }
             scan.close();
         }
         catch (FileNotFoundException e){
             e.printStackTrace();
         }
     }
//      private void courseFileRead(){
//         try{
//             Scanner scan = new Scanner(new File("Course.txt"));
//            
//             while(scan.hasNextLine()){
//                 courseList.add(scan.nextLine());
//             }
//             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){               
                new AllDataGUI();
            }
        });         
        add(panel, BorderLayout.LINE_END);
    }       
    private void comboBoxes(){                
        panel.setBorder(new EmptyBorder(0, 5, 5, 10));
        String[] comboBox1Array = nameList.toArray(new String[nameList.size()]);
        JComboBox comboBox1 = new JComboBox(comboBox1Array);          
        panel.add(examinerLabel);
        panel.add(comboBox1);          
        panel.add(viewTaughtCourses);
         viewTaughtCourses.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {                 
                 new ViewCourseGUI();
            }
        });  
         String[] comboBox2Array = courseList.toArray(new String[courseList.size()]);
         JComboBox comboBox2 = new JComboBox(comboBox2Array);
         panel.add(courseLabel);         
         panel.add(comboBox2); 
         panel.add(viewPrograms);
         viewPrograms.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {                 
                 new ViewProgramGUI();             
            }
        });  
         add(panel, BorderLayout.LINE_START); 

    }   

}

如果您不想深入研究上述混乱情况,使用split方法的代码是:

 private void examinnerFileRead(){
         try{
             Scanner scan = new Scanner(new File("Course.txt"));

             while(scan.hasNextLine()){
                 String getname = scan.nextLine();
                 String[] names = getname.split("-");
                 courseList.add(scan.nextLine());
                 String name = names[0];
                 String course = names[1];    

             }
             scan.close();
         }
         catch (FileNotFoundException e){
             e.printStackTrace();
         }
     }

组合框代码为:

 private void comboBoxes(){                
        panel.setBorder(new EmptyBorder(0, 5, 5, 10));
        String[] comboBox1Array = nameList.toArray(new String[nameList.size()]);
        JComboBox comboBox1 = new JComboBox(comboBox1Array);          
        panel.add(examinerLabel);
        panel.add(comboBox1);          
        panel.add(viewTaughtCourses);
         viewTaughtCourses.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {                 
                 new ViewCourseGUI();
            }
        });  
         String[] comboBox2Array = courseList.toArray(new String[courseList.size()]);
         JComboBox comboBox2 = new JComboBox(comboBox2Array);
         panel.add(courseLabel);         
         panel.add(comboBox2); 
         panel.add(viewPrograms);
         viewPrograms.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {                 
                 new ViewProgramGUI();             
            }
        });  
         add(panel, BorderLayout.LINE_START); 

    }  

共有2个答案

羊舌承颜
2023-03-14

以下片段有几个问题:

         while(scan.hasNextLine()){
             String getname = scan.nextLine();
             String[] names = getname.split("-");
             courseList.add(scan.nextLine());
             String name = names[0];
             String course = names[1];    

         }

>

  • 当第一行进入本地数组names并且第二行被添加到courseList时,您正在一次循环迭代中读取两行。

    名称名称课程都是局部变量,在它们声明的方法之外不可见。

  • 姜育
    2023-03-14

    我猜测哪些令牌属于每个列表,但你需要这样的东西:

             while(scan.hasNextLine()){
                 String line = scan.nextLine();
                 String[] tokens = line.split("-");
                 String code = tokens[0].trim();
                 String description = tokens[1].trim();
                 String examiner = tokens[2].trim();
                 String moderator = tokens[3].trim();
    
                 courseList.add(code);
                 courseList.add(description);
    
                 nameList.add(examiner);
                 nameList.add(moderator);
             }
    
     类似资料:
    • 我对JavaFX和JavaFX Scene Builder是新手,几个星期以来一直在研究并试图弄清楚如何简单地从文本文件中读取并在文本中显示其内容。我的controller类中有一个很好的文件读取功能,但我不知道如何将文本文件显示到fxml文档中的文本区域。我已经学会了如何单击按钮并使文件显示在文本区域中,但我希望GUI加载后立即在文本区域中显示内容。如果任何人有一个想法如何去做这件事,你的帮助将

    • 问题内容: 我试图从SQL中提取数据,然后将其写入文本文件。这在一定程度上做到了这一点, 但它仅从读取文本文件 的表中拉出1 。 我希望能够从表中提取所有数据,然后以诸如此类的列表格式发布到文本文件中… 我需要找出我做错了什么。 问题答案: 该函数将覆盖整个文件- 这就是为什么每次都只获得最后一条记录的原因。 您可以使用和代替。 尽管比构造一个大字符串并使用单个调用稍微复杂一些,但是如果您有很多记

    • 我有一个简单的图形用户界面,很少有用户放置配置文件信息的JTextArea组件。 单击“保存”按钮后,所有信息将转换为数组并另存为。txt使用 您可以创建多个配置文件。 在: 我希望所有保存的配置文件都显示在JComboBox中,这样用户就可以选择他的配置文件并编辑他的输入。 所以假设我有一个文件夹与配置文件: 如何让这些文件显示在组合框中?

    • 我已经创建了一个歌曲类,其中包括歌曲(标题、艺术家、专辑)的数据成员。我已经有了一个包含不同歌曲的. txt文件,该文件存储在数组列表中。在我的主类中,功能之一是允许用户通过标题、艺术家或专辑搜索歌曲。 我的问题是,当用户输入某些标题时,搜索功能无法找到歌曲。例如,当我搜索歌曲标题“停留”时,它会找到它。但是,当我搜索名为“波西米亚狂想曲”的歌曲时,它找不到存储的歌曲。我知道它是存储的,因为当我显

    • 本文向大家介绍详解Java读取本地文件并显示在JSP文件中,包括了详解Java读取本地文件并显示在JSP文件中的使用技巧和注意事项,需要的朋友参考一下 详解Java读取本地文件并显示在JSP文件中        当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片。其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径。

    • 请帮助我,因为我是java脚本的新手。我想显示一个文本文件的数据,它在“D:\vikas.txt”路径到一个文本框。如果有人能提供我一个完整的代码,这将是非常有帮助的。我使用的是谷歌chrome浏览器。如果你需要任何其他信息,请告诉我。 谢谢