java gui使用split函数在文本区域中显示

时间:2019-02-27 11:20:10

标签: java swing user-interface frontend

您好,我试图在文本区域内使用split函数,因此它将仅向用户显示某些信息,目前,我试图在GUI界面中使用一般编程中使用的典型方法,但是我认为我实现不正确。

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        String filename = f.getAbsolutePath();
    String st;
    String[] setdate = null;
    String[] submission = null;
    String[] title = null;
    String[] value = null;
    try 
    {
        FileReader reader = new FileReader (filename);
        BufferedReader br = new BufferedReader(reader);
        jTextArea1.read(br, null);
        br.close();
        jTextArea1.requestFocus();

    while ((st = br.readLine()) != null) {
        System.out.println(st); 
        if(st.contains("TITLE")) 
            title = st.split(":");
        if(st.contains("DATE SET"))
            setdate = st.split(":");                
        if(st.contains("SUBMISSION"))
            submission = st.split(":");
        if(st.contains("VALUE:"))
            value = st.split(":");
    }                  
    }
    catch (Exception e ) {
        JOptionPane.showMessageDialog( null, e);
    }
} 

cuurent display

2 个答案:

答案 0 :(得分:1)

FileReader reader = new FileReader (filename);
BufferedReader br = new BufferedReader(reader);
jTextArea1.read(br, null);
br.close();
jTextArea1.requestFocus();

while ((st = br.readLine()) != null) {

当前,您打开BufferedReader,阅读相关内容,然后直接将其关闭。再一次,您想使用刚刚关闭br.readLine()的同一阅读器再次阅读。

br.close();应该在finally块中完成

try (FileReader reader = new FileReader(filename); BufferedReader br = new BufferedReader(reader)) {
    jTextArea1.read(br, null);
    jTextArea1.requestFocus();

    while ((st = br.readLine()) != null) {
        System.out.println(st);
        if (st.contains("TITLE"))
            title = st.split(":");
        if (st.contains("DATE SET"))
            setdate = st.split(":");
        if (st.contains("SUBMISSION"))
            submission = st.split(":");
        if (st.contains("VALUE:"))
            value = st.split(":");
    }
} catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
}

答案 1 :(得分:0)

jTextArea1.read(br, null);

使用JTextArea的read(...)方法的目的是从文件读取数据并将数据添加到文本区域。

因此,调用该方法后,已读取文件中的所有数据。

如果要在将数据添加到文本区域之前解析数据,则不应使用read(...)方法。相反,您只是从文件中读取数据的每一行,然后使用JTextArea的append(...)方法添加数据。

if (st.contains("TITLE"))
    title = st.split(":");

此外,我不知道您的文件格式是什么,但是您希望该代码执行什么操作。每次读取包含TITLE的行时,都会创建一个新数组。我怀疑您应该创建数组以获取数据,然后使用append(...)方法将数据添加到文本区域。

但是没有明确的要求,我们只是猜测。