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

📄 xtree.java

📁 java写的多功能文件编辑器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    tree.setModel(_model);      //so we need to be in the event-dispatching thread.    tree.expandRow(0);    currentMode = mode;  }  public void valueChanged(TreeSelectionEvent tse)  {    JTree source = (JTree) tse.getSource();    if (source.isSelectionEmpty())      return;    XTreeNode node = (XTreeNode) source.getSelectionPath().getLastPathComponent();    if (node.getIndex() == -1)    {      parent.getTextArea().grabFocus();      return;    }    try    {      insert(node.getIndex() - 1);    } catch (Exception e) { }    source.setSelectionPath(source.getPathForRow(-1));  }  public void reload(DefaultTreeModel model)  {    // tree.setModel(model);    this.treeModel = model;  }  public void actionPerformed(ActionEvent evt)  {    Object o = evt.getSource();    if (o == expand)    {      for (int i = 0; i < tree.getRowCount(); i++)        tree.expandRow(i);    } else if (o == collapse) {      for (int i = tree.getRowCount(); i >= 0; i--)        tree.collapseRow(i);    } else if (o == reload) {      root.removeAllChildren();      treeModel.reload();      init("jext.insert.xml", false);      associateXTreeToMode(false);      ArrayList  instances = Jext.getInstances();      for (int i = 0; i < instances.size(); i++)      {        JextFrame instance = (JextFrame) instances.get(i);        if (instance != parent)        {          instance.getXTree().reload(treeModel);          instance.getXTree().associateXTreeToMode(false);        }      }    } else if (o == carriageReturn)      Jext.setProperty("carriage", carriageReturn.isSelected() ? "on" : "off");    else if (o == executeScript)      Jext.setProperty("execute", executeScript.isSelected() ? "on" : "off");    else if (o == textSurrounding)      Jext.setProperty("surrounding", textSurrounding.isSelected() ? "on" : "off");  }  private void insert(int index) throws BadLocationException  {    char c = '\0';    XTreeItem item = (XTreeItem) inserts.elementAt(index);    String data = item.getContent();    boolean script = item.isScript();    boolean mixed = item.isMixed();    StringBuffer _buf = new StringBuffer(data.length());    for (int i = 0; i < data.length(); i++)    {      if( (c = data.charAt(i)) == '\\' && i < data.length() - 1)      {	switch (data.charAt(i + 1))	{	  case 'n':	    i++;	    _buf.append('\n');	    break;	  case 't':	    i++;	    _buf.append('\t');	    break;	  case '\\':	    i++;	    _buf.append('\\');	    break;	}      } else	_buf.append(c);    }    data = _buf.toString();    JextTextArea textArea = parent.getTextArea();    if (script && executeScript.isSelected())    {      Run.execute(data, parent);    } else {      textArea.beginProtectedCompoundEdit();      boolean indent = textArea.getEnterIndent();      Document doc = textArea.getDocument();      String surroundText = "";      if (textArea.getSelectionStart() != textArea.getSelectionEnd())      {        surroundText = textArea.getSelectedText();        textArea.setSelectedText("");      }      _buf = new StringBuffer(data.length());      int caretState = 0;      int insertPos = 0;      int lastBreak = -1;      int wordStart = textArea.getCaretPosition();      int caret = data.length();      StringBuffer mixedScript = new StringBuffer(30);      boolean parsing = false;      boolean onFirstLine = true, wasFirstLine = false;out:  for (int i = 0 ; i < data.length(); i++)      {        switch (c = data.charAt(i))        {          case '|':            if (parsing)              mixedScript.append('|');            else            {              if (i < data.length() - 1 && data.charAt(i + 1) == '|')              {                i++;                _buf.append('|');              } else {                if (caretState == 0)                {                  caret = insertPos + _buf.length();                  caretState = 1;                  if (onFirstLine)                    wasFirstLine = true;                }              }            }            break;          case '\n':            if (parsing)            {              mixedScript.append('\n');              break;            }            if (indent && !onFirstLine)            {              doc.insertString(wordStart + insertPos, _buf.toString(), null);              insertPos += _buf.length();              _buf = new StringBuffer(data.length() - _buf.length());              int tempLen = doc.getLength();              Indent.indent(textArea, textArea.getCaretLine(), true, true);              int indentLen = doc.getLength() - tempLen;              if (caretState == 1)              {                if (!wasFirstLine)                  caret += indentLen;                caretState = 2;              }              insertPos += indentLen;              wasFirstLine = false;            }            _buf.append('\n');            onFirstLine = false;            lastBreak = i;            break;          case '%':            if (mixed)            {              if (i < data.length() - 1 && data.charAt(i + 1) == '%')              {                i++;                (parsing ? mixedScript : _buf).append('%');              } else if (parsing) {                parsing = false;                try                {                  if (!DawnParser.isInitialized())                  {                    DawnParser.init();                    DawnParser.installPackage(Jext.class, "dawn-jext.scripting");                  }                  DawnParser parser = new DawnParser(new StringReader(mixedScript.toString()));                  parser.setProperty("JEXT.JEXT_FRAME", parent);                  parser.exec();                  if (!parser.getStack().isEmpty())                    _buf.append(parser.popString());                } catch (DawnRuntimeException dre) {                  JOptionPane.showMessageDialog(parent, dre.getMessage(),                                                Jext.getProperty("dawn.script.error"),                                                JOptionPane.ERROR_MESSAGE);                }                mixedScript = new StringBuffer(30);              } else {                parsing = true;              }              break;            }          default:            (parsing ? mixedScript : _buf).append(c);        }      }      doc.insertString(wordStart + insertPos, _buf.toString(), null);      if (!onFirstLine)      {        int tempLen = doc.getLength();        Indent.indent(textArea, textArea.getCaretLine(), true, true);        if (lastBreak < caret && caretState <= 1)          caret += doc.getLength() - tempLen;      }      int caretPos = wordStart + caret;      int tempLen = doc.getLength();      if (caretPos > tempLen)        caretPos = tempLen;      if (surroundText.length() > 0 && textSurrounding.isSelected())        doc.insertString(caretPos, surroundText, null);      textArea.setCaretPosition(caretPos);      textArea.endProtectedCompoundEdit();    }    textArea.grabFocus();  }  private static final ImageIcon[] leaves =  {    Utilities.getIcon("images/tree_leaf.gif", Jext.class),    Utilities.getIcon("images/tree_leaf_script.gif", Jext.class),    Utilities.getIcon("images/tree_leaf_mixed.gif", Jext.class)  };  class XTreeCellRenderer extends DefaultTreeCellRenderer  {    XTreeCellRenderer()    {      super();      openIcon = Utilities.getIcon("images/tree_open.gif", Jext.class);      closedIcon = Utilities.getIcon("images/tree_close.gif", Jext.class);      textSelectionColor = Color.red;      borderSelectionColor = tree.getBackground();      backgroundSelectionColor = tree.getBackground();    }    public Component getTreeCellRendererComponent(JTree source, Object value, boolean sel,                                                  boolean expanded, boolean leaf, int row,                                                  boolean hasFocus)    {      if (leaf)      {        TreePath path = source.getPathForRow(row);        if (path != null)        {          XTreeNode node = (XTreeNode) path.getLastPathComponent();          int index = node.getIndex();          if (index != -1)          {            leafIcon = leaves[((XTreeItem) inserts.elementAt(index - 1)).getType()];          }        }      }      return super.getTreeCellRendererComponent(source, value, sel, expanded, leaf, row, hasFocus);    }  }}// End of XTree.java

⌨️ 快捷键说明

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