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

📄 liveparenmatcher.java

📁 java swing 开发代码
💻 JAVA
字号:
// LiveParenMatcher.java// Like ParenMatcher but continuously colors as the user edits the document.package	jswing.ch22;import javax.swing.*;import javax.swing.text.*;import javax.swing.event.*;public class LiveParenMatcher extends ParenMatcher implements DocumentListener {  public LiveParenMatcher() {    super();    getDocument().addDocumentListener(this);  }  public void changedUpdate(DocumentEvent de) {    // no insertion or deletion, so do nothing  }  public void insertUpdate(DocumentEvent de) {    SwingUtilities.invokeLater(this); // will call run()  }  public void removeUpdate(DocumentEvent de) {    SwingUtilities.invokeLater(this); // will call run()  }  public static void main(String[] args) {    JFrame frame = new JFrame("LiveParenMatcher");    frame.setContentPane(new JScrollPane(new LiveParenMatcher()));    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    frame.setSize(300, 200);    frame.setVisible(true);  }  // ---- finished example from "The DocumentListener Interface" ----  // ---- begin example from "The DocumentEvent Interface" ----  //      (method renamed to insertUpdate_2)    public void insertUpdate_2(DocumentEvent de) {    Document doc = de.getDocument();    int offset = de.getOffset();    int length = de.getLength();    String inserted = "";    try {      inserted = doc.getText(offset, length);    } catch (BadLocationException ble) { }    for (int j=0; j < inserted.length(); j+=1) {      char ch = inserted.charAt(j);      if (ch == '(' || ch == '[' || ch == '{' ||          ch == ')' || ch == ']' || ch == '}'  ) {        SwingUtilities.invokeLater(this); // will call run()        return; // no need to check further      }    }  }  // ---- begin example from "The Segment Class" ----  //      (method renamed to insertUpdate_3)  public void insertUpdate_3(DocumentEvent de) {    Document doc = de.getDocument();    int offset = de.getOffset();    int length = de.getLength();    Segment seg = new Segment();    try {      doc.getText(offset, length, seg); // text placed in Segment    } catch (BadLocationException ble) { }    // iterate through the Segment    for (char ch = seg.first(); ch != seg.DONE; ch = seg.next())      if (ch == '(' || ch == '[' || ch == '{' ||          ch == ')' || ch == ']' || ch == '}'  ) {        SwingUtilities.invokeLater(this); // will call run()        return; // no need to check further      }  }  // ---- begin example from "The ElementIterator Class" ----  //      (method renamed to removeUpdate_2)  public void removeUpdate_2(DocumentEvent de) {    // print some debugging information before matching the parens    ElementIterator iter = new ElementIterator(de.getDocument());    for (Element elem = iter.first(); elem != null; elem = iter.next()) {      DocumentEvent.ElementChange change = de.getChange(elem);      if (change != null) { // null means there was no change in elem        System.out.println("Element "+elem.getName() + " (depth " +            iter.depth()+") changed its children: " +            change.getChildrenRemoved().length+" children removed, " +            change.getChildrenAdded().length+" children added.\n");      }    }    SwingUtilities.invokeLater(this); // will call run()  }}

⌨️ 快捷键说明

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