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

📄 linenumberlist.java

📁 用java编写的IDE程序示例
💻 JAVA
字号:
/*
 * Created on 2004-5-30
 */
package yuchifang.javaIDE.editors;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.AbstractListModel;
import javax.swing.JList;
import javax.swing.ListSelectionModel;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;

import yuchifang.javaIDE.util.IDEUtil;

/**
 * @author yuchifang
 */
public class LineNumberList extends JList
{
  private LineNumberModel lnm;
  private JTextComponent tc;
  
  public LineNumberList(JTextComponent tc)
  {
    this.tc = tc;
    
    lnm = new LineNumberModel();
    setModel(lnm);
//    setPreferredSize(new Dimension(20, 400));

    setBackground(Color.LIGHT_GRAY);
    setForeground(Color.DARK_GRAY);
    setSelectionBackground(Color.BLUE);
    setSelectionForeground(Color.WHITE);
    
    setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    
    setCursor(new Cursor(Cursor.HAND_CURSOR));
    
    Font font = new Font("宋体", Font.PLAIN, 12);
    setFont(font);
    
    setFixedCellHeight(getFontMetrics(font).getHeight());

    tc.getDocument().addDocumentListener(
      new DocumentListener()
      {
				public void insertUpdate(DocumentEvent e)
				{
          resetLineNumber();
				}

				public void removeUpdate(DocumentEvent e)
				{
          resetLineNumber();
				}

				public void changedUpdate(DocumentEvent e)
				{
				}
      }
    );
    
    tc.addCaretListener(
      new CaretListener()
      {
				public void caretUpdate(CaretEvent e)
				{
          caretMoved();
				}
      }
    );
    
    resetLineNumber();
    //##如何在行被选择的时候做出反映?
  }
  
	protected void caretMoved()
	{
    setSelectedIndex(IDEUtil.getCaretRowCol(tc.getText(), tc.getCaretPosition()).height - 1);
	}

	private void resetLineNumber()
  {
    lnm.setSize(IDEUtil.getCaretRowCol(tc.getText(), tc.getText().length()).height);
    int digits = (int)Math.log10(lnm.getSize()) + 2;
    setPreferredSize(new Dimension(getFontMetrics(getFont()).charWidth('W') * digits, 400));
  }
}

class LineNumberModel extends AbstractListModel
{
  private int size;
  
  public Object getElementAt(int index)
  {
    return new Integer(index + 1);
  }

  public int getSize()
  {
    return size;
  }

  public void setSize(int lineCount)
  {
    if (lineCount >= 0)
      size = lineCount;
    fireIntervalAdded(this, 0, getSize());
  }
}

⌨️ 快捷键说明

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