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