⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diffwidget.java

📁 用来二进制文件比较
💻 JAVA
字号:
package VDiff;

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

import JLibDiff.*;

public class DiffWidget extends JPanel {

    private String oldFilename;
    private String newFilename;

    private JTextArea oldTextArea;
    private JTextArea newTextArea;

    public DiffWidget(String oldfilename, String newfilename) {
	super();
	this.oldFilename = oldfilename;
	this.newFilename = newfilename;


        createInterface();

	loadAndFillAreas();

	diffAndColorizeAreas();
    }

    private void createInterface() {
	this.setLayout(new BorderLayout());
	JPanel mainPanel = new JPanel();
	this.add(mainPanel);
	mainPanel.setLayout(new GridLayout(0,2));

 	JPanel leftPanel = new JPanel();
 	JPanel rightPanel = new JPanel();
	leftPanel.setLayout(new BorderLayout());
	rightPanel.setLayout(new BorderLayout());
	mainPanel.add(leftPanel);
	mainPanel.add(rightPanel);

	oldTextArea = new JTextArea(20, 40);
	newTextArea = new JTextArea(20, 40);
	JScrollPane leftScrollPane = new JScrollPane(oldTextArea);
	JScrollPane rightScrollPane = new JScrollPane(newTextArea);
  	leftPanel.add(leftScrollPane, BorderLayout.CENTER);
  	rightPanel.add(rightScrollPane, BorderLayout.CENTER);

	leftScrollPane.setVerticalScrollBarPolicy(
			  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
	leftScrollPane.setHorizontalScrollBarPolicy(
			  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

	rightScrollPane.setVerticalScrollBarPolicy(
                          JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
	rightScrollPane.setHorizontalScrollBarPolicy(
			  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

	oldTextArea.setEditable(false);
	newTextArea.setEditable(false);

	Font font = new Font("helvetica", Font.PLAIN, 12);
	JLabel leftLabel = new JLabel(oldFilename, JLabel.CENTER);
	leftLabel.setForeground(Color.black);
	leftLabel.setFont(font);
	JLabel rightLabel = new JLabel(newFilename, JLabel.CENTER);
	rightLabel.setForeground(Color.black);
	rightLabel.setFont(font);

  	leftPanel.add(leftLabel, BorderLayout.SOUTH);
  	rightPanel.add(rightLabel, BorderLayout.SOUTH);

	
	/*  
	    caret disabled, until translate method  
	    in CaretSynchronizer will be implemented
	*/
// 	DiffCaret leftCaret = new DiffCaret();
// 	DiffCaret rightCaret = new DiffCaret();
// 	oldTextArea.setCaret(leftCaret);
// 	leftCaret.install(oldTextArea);
// 	newTextArea.setCaret(rightCaret);
// 	rightCaret.install(newTextArea);

//  	leftCaret.setBlinkRate(300);
//  	rightCaret.setBlinkRate(300);
// 	leftCaret.setVisible(true);
// 	rightCaret.setVisible(true);

//  	oldTextArea.setCaretColor(Color.black);
//  	newTextArea.setCaretColor(Color.black);

//  	new CaretSynchronizer(leftCaret, rightCaret);
    }

    private void loadAndFillAreas() {
	try {
	    String line;
	    LineNumberReader in=new LineNumberReader(
					new FileReader(oldFilename));
	    while ((line =in.readLine()) != null) {
		oldTextArea.append(line+"\n");
	    }
	    in.close();
	    
	    LineNumberReader inn=new LineNumberReader(
                                        new FileReader(newFilename));	
	    while ((line =inn.readLine()) != null) {
		newTextArea.append(line+"\n");
	    }
	    inn.close();
	} catch (FileNotFoundException e) {
	    System.err.println(e);
	    e.printStackTrace();
	    System.exit(1);	    
	} catch (IOException e) {
	    System.err.println(e);
	    e.printStackTrace();
	    System.exit(1);	    
	}
    }

    private void diffAndColorizeAreas() {
	diff d = new diff();
	try {
	    // bugs when we use diffString(String, String) !!!
	    //d.diffString(oldTextArea.getText(), newTextArea.getText());
	    d.diffFile(oldFilename, newFilename);
	} catch (IOException e) {
	    System.err.println(e);
	    e.printStackTrace();
	    System.exit(1);
	}

	HunkColorVisitor v = new HunkColorVisitor(oldTextArea, newTextArea);
	d.accept(v);
    }



    /* --- like Default Caret but stay visible when focus is lost --- */
//     class DiffCaret extends DefaultCaret {
// 	public DiffCaret() {
// 	    super();
// 	}
// 	public void focusGained(FocusEvent e) {
// 	}
// 	public void focusLost(FocusEvent e) {
// 	}
//     }

//     class CaretSynchronizer implements ChangeListener {
// 	private DiffCaret lCaret;
// 	private DiffCaret cCaret;

// 	public CaretSynchronizer(DiffCaret cc, DiffCaret lc) {
// 	    this.lCaret = lc;
// 	    this.cCaret = cc;

// 	    lCaret.addChangeListener(this);
// 	}

// 	public void stateChanged(ChangeEvent e) {
// 	    if (e.getSource() instanceof DiffCaret) {
// 		int offsetInNewBuffer = lCaret.getDot();
// 		cCaret.setDot(translateOffsetNewToOld(offsetInNewBuffer));
// 	    }
// 	}

// 	private int translateOffsetNewToOld(int newOffset) {
// 	    int oldOffset = 0;
// 	    /* -- NOT YET IMPLEMENTED -- */
// 	    return oldOffset;
// 	}
//     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -