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

📄 textfilepropertiesdialog.java

📁 具有不同语法高亮的编辑器实例
💻 JAVA
字号:
/*
 * TextFilePropertiesDialog.java - Dialog allowing you to view/edit a
 * text file's properties.
 */
package org.fife.ui;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import org.fife.RUtilities;
import org.fife.ui.RButton;
import org.fife.ui.rtextarea.RTextAreaEditorKit;
import org.fife.rtext.RTextEditorPane;

/**
 * A dialog that displays the properties of an individual text file being
 * edited by an <code>RTextEditorPane</code>.  Some properties can
 * be modified directly from this dialog.
 *
 * @author Robert Futrell
 * @version 0.1
 */
public class TextFilePropertiesDialog
    extends JDialog
    implements ActionListener {

  /**
   *
   */
  private static final long serialVersionUID = 3143244782095735798L;

  public static final String LINE_TERMINATOR_CR = "\r";
  public static final String LINE_TERMINATOR_LF = "\n";
  public static final String LINE_TERMINATOR_CRLF = "\r\n";
  public static final String LINE_TERMINATOR_SYSTEM = System.getProperty(
      "line.separator");

  private SpecialValueComboBox terminatorCombo;
  private JComboBox encodingCombo;

  private RButton okButton;

  private RTextEditorPane textArea;

      /*****************************************************************************/

  /**
   * Constructor.
   *
   * @param parent The main application window.
   * @param textArea The text area on which to report.
   */
  public TextFilePropertiesDialog(Frame parent,
                                  RTextEditorPane textArea) {

    super(parent);
    this.textArea = textArea;

    ResourceBundle msg = ResourceBundle.getBundle(
        "org.fife.ui.TextFilePropertiesDialog");

    setTitle(msg.getString("Title") + textArea.getFileName());

    JPanel contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout());
    contentPane.setBorder(UIUtilities.getEmpty5Border());

    // Where we actually add our content.
    JPanel content2 = new JPanel();
    content2.setLayout(new SpringLayout());
    contentPane.add(content2, BorderLayout.NORTH);

    JLabel filePathLabel = new JLabel(msg.getString("Path"));
    JTextField filePathField = new JTextField(30);
    filePathField.setText(textArea.getFileFullPath());
    filePathField.setEditable(false);
    filePathLabel.setLabelFor(filePathField);
    content2.add(filePathLabel);
    content2.add(filePathField);

    JLabel linesLabel = new JLabel(msg.getString("Lines"));
    JLabel linesCountLabel = new JLabel("" + textArea.getLineCount());
    content2.add(linesLabel);
    content2.add(linesCountLabel);

    JLabel charsLabel = new JLabel(msg.getString("Characters"));
    JLabel charsCountLabel = new JLabel("" +
                                        textArea.getDocument().getLength());
    content2.add(charsLabel);
    content2.add(charsCountLabel);

    JLabel terminatorLabel = RUtilities.createLabel(msg,
        "LineTerminator", "LineTerminatorMnemonic");
    terminatorCombo = new SpecialValueComboBox();
    terminatorCombo.addSpecialItem(msg.getString("SysDef"),
                                   LINE_TERMINATOR_SYSTEM);
    terminatorCombo.addSpecialItem(msg.getString("CR"),
                                   LINE_TERMINATOR_CR);
    terminatorCombo.addSpecialItem(msg.getString("LF"),
                                   LINE_TERMINATOR_LF);
    terminatorCombo.addSpecialItem(msg.getString("CRLF"),
                                   LINE_TERMINATOR_CRLF);
    terminatorCombo.setSelectedSpecialItem( (String) textArea.getDocument().
                                           getProperty(RTextAreaEditorKit.
        EndOfLineStringProperty));
    terminatorCombo.setActionCommand("TerminatorComboBox");
    terminatorCombo.addActionListener(this);
    terminatorLabel.setLabelFor(terminatorCombo);
    content2.add(terminatorLabel);
    content2.add(terminatorCombo);

    JLabel encodingLabel = RUtilities.createLabel(msg,
                                                  "Encoding",
                                                  "EncodingMnemonic");
    encodingCombo = new JComboBox();
    // Populate the combo box with all available encodings.
    Map availcs = Charset.availableCharsets();
    Set keys = availcs.keySet();
    for (Iterator i = keys.iterator(); i.hasNext(); ) {
      encodingCombo.addItem( (String) i.next());
    }
    setEncoding(textArea.getEncoding());
    encodingCombo.setActionCommand("encodingCombo");
    encodingCombo.addActionListener(this);
    encodingLabel.setLabelFor(encodingCombo);
    content2.add(encodingLabel);
    content2.add(encodingCombo);

    JLabel sizeLabel = new JLabel(msg.getString("FileSize"));
    File file = new File(textArea.getFileFullPath());
    String size = "";
    if (file.exists() && !file.isDirectory()) {
      size = "" + file.length();
    }
    JLabel sizeLabel2 = new JLabel(size);
    content2.add(sizeLabel);
    content2.add(sizeLabel2);

    long temp = textArea.getLastModified();
    String modifiedString;
    if (temp <= 0) { // 0 or -1; too lazy to check which one...
      modifiedString = "";
    }
    else {
      Date modifiedDate = new Date(temp);
      SimpleDateFormat rob = new SimpleDateFormat("hh:mm a  EEE, MMM d, yyyy");
      modifiedString = rob.format(modifiedDate);
    }
    JLabel modifiedLabel = new JLabel(msg.getString("LastModified"));
    JLabel modified = new JLabel(modifiedString);
    content2.add(modifiedLabel);
    content2.add(modified);

    RUtilities.makeSpringCompactGrid(content2,
                                     7, 2, // rows,cols,
                                     0, 0, // initial-x, initial-y,
                                     5, 5); // x-spacing, y-spacing.

    // Make a panel for OK and cancel buttons.
    JPanel bottomPanel = new JPanel();
    JPanel buttonPanel = new JPanel(new GridLayout(1, 2, 5, 0));
    okButton = RUtilities.createRButton(msg, "OK", "OKMnemonic");
    okButton.setActionCommand("OKButton");
    okButton.addActionListener(this);
    okButton.setEnabled(false);
    buttonPanel.add(okButton);
    RButton cancelButton = RUtilities.createRButton(msg,
        "Cancel", "CancelMnemonic");
    cancelButton.setActionCommand("CancelButton");
    cancelButton.addActionListener(this);
    buttonPanel.add(cancelButton);
    bottomPanel.add(buttonPanel);
    contentPane.add(bottomPanel, BorderLayout.SOUTH);

    setContentPane(contentPane);
    setModal(true);
    pack();
    setLocationRelativeTo(parent);

  }

      /*****************************************************************************/

  /**
   * Listens for actions in this dialog.
   *
   * @param e The action event.
   */
  public void actionPerformed(ActionEvent e) {

    String actionCommand = e.getActionCommand();

    if (actionCommand.equals("TerminatorComboBox")) {
      okButton.setEnabled(true);
    }

    else if (actionCommand.equals("encodingCombo")) {
      okButton.setEnabled(true);
    }

    else if (actionCommand.equals("OKButton")) {
      String terminator = terminatorCombo.getSelectedSpecialItem();
      if (terminator != null) {
        textArea.getDocument().putProperty(
            RTextAreaEditorKit.EndOfLineStringProperty,
            terminator);
      }
      String encoding = (String) encodingCombo.getSelectedItem();
      if (encoding != null) {
        textArea.setEncoding(encoding);
      }
      setVisible(false);
    }

    else if (actionCommand.equals("CancelButton")) {
      setVisible(false);
    }

  }

      /*****************************************************************************/

  /**
   * Sets the encoding selected by this dialog.
   *
   * @param encoding The desired encoding.  If this value is invalid or not
   *                 supported by this OS, <code>US-ASCII</code> is used.
   * @see #getEncoding
   */
  private void setEncoding(String encoding) {

    Charset cs1 = Charset.forName(encoding);

    int count = encodingCombo.getItemCount();
    for (int i = 0; i < count; i++) {
      String item = (String) encodingCombo.getItemAt(i);
      Charset cs2 = Charset.forName(item);
      if (cs1.equals(cs2)) {
        encodingCombo.setSelectedIndex(i);
        return;
      }
    }

    // Encoding not found: select default.
    cs1 = Charset.forName("US-ASCII");
    for (int i = 0; i < count; i++) {
      String item = (String) encodingCombo.getItemAt(i);
      Charset cs2 = Charset.forName(item);
      if (cs1.equals(cs2)) {
        encodingCombo.setSelectedIndex(i);
        return;
      }
    }

  }

      /*****************************************************************************/

}

⌨️ 快捷键说明

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