簡體   English   中英

Java:Swing-比較2個文件時的JCheckBox

[英]Java: Swing - JCheckBox at compare 2 files

我正在嘗試如果CheckBox為true以顯示兩個文件開始的位置不同。

碼:

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

public class SwingFC implements ActionListener {
    JTextField jtfFirst, jtfSecond;
    JLabel jlabFirst, jlabSecond, jlabResult;
    JButton jbtnComp;
    JCheckBox checkBox;

    SwingFC() {
        JFrame jfrm = new JFrame("Compare Files");
        jfrm.setLayout(new FlowLayout());
        jfrm.setSize(300, 220);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jtfFirst = new JTextField(25);
        jtfSecond = new JTextField(25);
        jtfFirst.setActionCommand("fileA");
        jtfSecond.setActionCommand("fileB");

        JButton jbtnComp = new JButton("Compare");
        jbtnComp.addActionListener(this);

        jlabFirst = new JLabel("First file: ");
        jlabSecond = new JLabel("Second file: ");
        jlabResult = new JLabel("");

        checkBox = new JCheckBox("Show position of mismatch");

        jfrm.add(jlabFirst);
        jfrm.add(jtfFirst);
        jfrm.add(jlabSecond);
        jfrm.add(jtfSecond);
        jfrm.add(checkBox);
        jfrm.add(jbtnComp);
        jfrm.add(jlabResult);

        jfrm.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        int i, j = 0;

        if (jtfFirst.getText().equals("")) {
            jlabResult.setText("First file name missing.");
            return;
        }
        if (jtfSecond.getText().equals("")) {
            jlabResult.setText("Second file name missing.");
            return;
        }

        try (FileInputStream f1 = new FileInputStream(jtfFirst.getText());
                FileInputStream f2 = new FileInputStream(jtfSecond.getText())) {
            String count = null;

            do {
                i = f1.read();
                j = f2.read();
                if (i != j)
                    break;
            } while (i != -1 && j != -1);

            if (i != j)
                if (checkBox.isSelected())
                    jlabResult.setText("Files differ at location" + count);
                else
                    jlabResult.setText("Files are not the same");
            else
                jlabResult.setText("Files compare equal.");
        } catch (IOException e) {
            jlabResult.setText("File Error");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SwingFC();
            }
        });
    }
}

題:

  • 我想知道如何分配這個不同的String count並顯示在

    jlabResult.setText(“文件在不同位置” +計數);

我該如何解決?
問候。

添加變量以存儲位置:

int position = 0;

然后在i == j時遞增

並設置文本jlabResult.setText("Files differ at location " + position);

您不需要可變的String count

整個代碼是:

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

public class SwingFC implements ActionListener {
    JTextField jtfFirst, jtfSecond;
    JLabel jlabFirst, jlabSecond, jlabResult;
    JButton jbtnComp;
    JCheckBox checkBox;

    SwingFC() {
        JFrame jfrm = new JFrame("Compare Files");
        jfrm.setLayout(new FlowLayout());
        jfrm.setSize(300, 220);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jtfFirst = new JTextField(25);
        jtfSecond = new JTextField(25);
        jtfFirst.setActionCommand("fileA");
        jtfSecond.setActionCommand("fileB");

        JButton jbtnComp = new JButton("Compare");
        jbtnComp.addActionListener(this);

        jlabFirst = new JLabel("First file: ");
        jlabSecond = new JLabel("Second file: ");
        jlabResult = new JLabel("");

        checkBox = new JCheckBox("Show position of mismatch");

        jfrm.add(jlabFirst);
        jfrm.add(jtfFirst);
        jfrm.add(jlabSecond);
        jfrm.add(jtfSecond);
        jfrm.add(checkBox);
        jfrm.add(jbtnComp);
        jfrm.add(jlabResult);

        jfrm.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        int i, j = 0;

        if (jtfFirst.getText().equals("")) {
            jlabResult.setText("First file name missing.");
            return;
        }
        if (jtfSecond.getText().equals("")) {
            jlabResult.setText("Second file name missing.");
            return;
        }

        try (FileInputStream f1 = new FileInputStream(jtfFirst.getText());
             FileInputStream f2 = new FileInputStream(jtfSecond.getText())) {
            //String count = null;

            int position = 0;

            do {
                i = f1.read();
                j = f2.read();
                position++;
                if (i != j)
                    break;
            } while (i != -1 && j != -1);

            if (i != j)
                if (checkBox.isSelected())
                    jlabResult.setText("Files differ at location " + position);
                else
                    jlabResult.setText("Files are not the same");
            else
                jlabResult.setText("Files compare equal.");
        } catch (IOException e) {
            jlabResult.setText("File Error");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SwingFC();
            }
        });
    }
}

這個對我有用。 我希望這是有幫助的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM