📄 diffwidget.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 + -