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

如何从txt文件中读取单独的部分以在JavaGUI中显示?

昝光临
2023-03-14

所以在这里,就像这张图片一样,我需要在一个txt文件中显示我拥有的门票的统计信息。在我的文件中,我使用“,”分隔了4个字段,但我不知道如何在GUI中单独显示它们,即,对于Ticket price下的4个字段,我需要显示价格,这是我txt文件中每行的第2部分,对于Ticket Amounts,则是文件中每行的第3部分。那么我该如何向他们展示呢?我已经设置了一个演示它应该是什么样子,对于图片中的每种类型,我需要为txt文件中的每种类型显示类似的行。所以基本上我需要展示从“VIP-AC,30美元,66美元,30/10/2020”到这个等等(下一行)

这是我到目前为止的代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;

public class TicketStats extends JFrame {

private JPanel contentPane;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TicketStats frame = new TicketStats();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public TicketStats() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1016, 566);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    
    JButton backButton = new JButton("Back");
    backButton.setBounds(846, 11, 144, 54);
    backButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            dispose();
            User user = new User();
            user.setVisible(true);
        }
    });
    contentPane.setLayout(null);
    backButton.setFont(new Font("Tahoma", Font.PLAIN, 16));
    contentPane.add(backButton);
    
    JLabel lblNewLabel = new JLabel("Ticket Info");
    lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 36));
    lblNewLabel.setBounds(385, 66, 227, 44);
    contentPane.add(lblNewLabel);
    
    JLabel lblNewLabel_1 = new JLabel("Ticket Type");
    lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 16));
    lblNewLabel_1.setBounds(183, 164, 108, 25);
    contentPane.add(lblNewLabel_1);
    
    JLabel lblNewLabel_2 = new JLabel("Ticket Price");
    lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 16));
    lblNewLabel_2.setBounds(358, 164, 108, 25);
    contentPane.add(lblNewLabel_2);
    
    JLabel lblNewLabel_3 = new JLabel("Tickets Left");
    lblNewLabel_3.setFont(new Font("Tahoma", Font.PLAIN, 16));
    lblNewLabel_3.setBounds(535, 164, 108, 25);
    contentPane.add(lblNewLabel_3);
    
    JLabel lblNewLabel_4 = new JLabel("Match Date");
    lblNewLabel_4.setFont(new Font("Tahoma", Font.PLAIN, 16));
    lblNewLabel_4.setBounds(699, 164, 108, 25);
    contentPane.add(lblNewLabel_4);
    
    JLabel lblNewLabel_5 = new JLabel("VIP-AC");
    lblNewLabel_5.setFont(new Font("Tahoma", Font.PLAIN, 12));
    lblNewLabel_5.setBounds(183, 228, 76, 14);
    contentPane.add(lblNewLabel_5);
    
    JLabel lblNewLabel_6 = new JLabel("30$");
    lblNewLabel_6.setFont(new Font("Tahoma", Font.PLAIN, 12));
    lblNewLabel_6.setBounds(358, 228, 76, 14);
    contentPane.add(lblNewLabel_6);
    
    JLabel lblNewLabel_7 = new JLabel("66");
    lblNewLabel_7.setFont(new Font("Tahoma", Font.PLAIN, 12));
    lblNewLabel_7.setBounds(535, 228, 82, 14);
    contentPane.add(lblNewLabel_7);
    
    JLabel lblNewLabel_8 = new JLabel("30/10/2020");
    lblNewLabel_8.setBounds(699, 228, 76, 14);
    contentPane.add(lblNewLabel_8);
    
    File file = new File("Ticket.txt");
    try(BufferedReader reader = new BufferedReader(new FileReader(file))) {
        StringBuilder sb = new StringBuilder();
        String text;
        
        while((text = reader.readLine()) != null) {
            sb.append(text).append(", ");
        }
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } 
    
    JSeparator separator = new JSeparator();
    separator.setBounds(172, 201, 621, 2);
    contentPane.add(separator);
    
    JSeparator separator1 = new JSeparator();
    separator1.setForeground(Color.BLACK);
    separator1.setOrientation(SwingConstants.VERTICAL);
    separator1.setBounds(664, 164, 2, 283);
    contentPane.add(separator1);
    
    JSeparator separator_1 = new JSeparator();
    separator_1.setOrientation(SwingConstants.VERTICAL);
    separator_1.setForeground(Color.BLACK);
    separator_1.setBounds(487, 164, 2, 283);
    contentPane.add(separator_1);
    
    JSeparator separator_2 = new JSeparator();
    separator_2.setOrientation(SwingConstants.VERTICAL);
    separator_2.setForeground(Color.BLACK);
    separator_2.setBounds(314, 164, 2, 283);
    contentPane.add(separator_2);
    
}
}

共有1个答案

唐彬炳
2023-03-14

下面是读取分隔文本文件中的数据并在JTable中显示数据的基本示例:

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableFromFile extends JPanel
{
    public TableFromFile()
    {
        setLayout( new BorderLayout() );

        JTable table = new JTable( getTableModel() );
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private TableModel getTableModel()
    {
        String delimiter = ":";
        DefaultTableModel model = new DefaultTableModel();

        try
        {
            BufferedReader reader = getFileReader();

            //  First line will contain the column names

            String line = reader.readLine();
            model.setColumnIdentifiers( line.split(delimiter) );

            //  Remaining lines in the file will be the data

            while ((line = reader.readLine()) != null)
            {
                model.addRow( line.split(delimiter) );
            }

            reader.close();
        }
        catch(Exception e) { System.out.println(e); }


        return model;
    }

    private BufferedReader getFileReader()
    {
        //  Create data to simulate reading data from a file

        String data =
            "Letter:Number\n" +
            "A:1\n" +
            "B:2\n" +
            "C:3";

        BufferedReader reader = new BufferedReader( new StringReader( data ) );

        //  In your real application the data would come from a file

        //Reader reader = new BufferedReader( new FileReader(...) );

        return reader;
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Table From File");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TableFromFile() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

上面的示例使用“:”作为文件中字符串的单字符分隔符。

由于使用两个字符作为分隔符,因此需要使用稍微复杂的正则表达式来进行拆分。因此,您的拆分声明将是:

model.addRow( line.split(":\\s") );
 类似资料:
  • 我正在编写一个程序,使用一个文件中的30个分数,计算出最低、最高和平均分数。我很难理解如何编写循环语句来读取每个等级并更新最低/最高等级,并在读取下一个等级之前将该值添加到总和。 谢谢想出来了:

  • 我一直在互联网上寻找帮助,但我找不到,所以我求助于发帖。 我有一个txt文件,格式如下 1/2 0 1/6 6/11 1/6 2/10 我需要读取这些单独的分数,并输入分子和分母的函数称为BigFraction(num,denom)。 我调用读取器并将其作为字符串输出。然后,我在空格上进行拆分,以获得作为字符串的各个分数,并将它们输入到我的助手方法strToBF中,该方法在正斜杠上进行拆分,并输入

  • 我的项目中有这样一段代码: 没有错误,应用程序运行正常,但是变量中从来没有任何文本,我确信txt文件中有文本! 我已经尝试过不同的方法来读取文本文件(使用BufferedReader、Scanner、FileInputStream和FileReader),但都不起作用。 另外,我几乎可以肯定问题不在变量中,因为我尝试通过代码(使用运行时)打开文件,它正常打开了正确的文件。 好的,我尝试添加,但是仍

  • 我正试图编写一个程序,读取网络中相互交互的节点列表。它以以下格式写入文本文件: 这表示节点1与节点2和节点3交互,节点2仅与节点3交互,等等。 该程序将能够读取该文件,并将删除任何重复的交互,并且如果我输入节点的名称,将能够向我返回节点与其他节点的交互次数。然而,我对Java非常陌生,我首先尝试让它读入文件,尽管我的代码目前没有读入文件。以下是我迄今为止的代码: 任何关于如何解决此问题的帮助都将不

  • 问题内容: 如何从.txt文件读取和显示数据? 问题答案: 然后,您可以使用in.readLine(); 一次读取一行。要读到最后,可以这样编写while循环:

  • =================================================================================== 2019-11-13 20:07:44.224 1004-1004/TransactionExecutor.java:68E/cklee:android.app.ActivityThread(H.handleMessage)Acti