📄 myneweditor.java
字号:
xFinish - xStart, attr, false);
else if (xStart != xFinish)
m_doc.setCharacterAttributes(xStart,
xFinish - xStart, attr, false);
else {
MutableAttributeSet inputAttributes =
m_kit.getInputAttributes();
inputAttributes.addAttributes(attr);
}
}
protected void showStyles() {
m_skipUpdate = true;
if (m_cbStyles.getItemCount() > 0)
m_cbStyles.removeAllItems();
Enumeration en = m_doc.getStyleNames();
while (en.hasMoreElements()) {
String str = en.nextElement().toString();
m_cbStyles.addItem(str);
}
m_styles = new Hashtable();
m_skipUpdate = false;
}
protected void updateUndo() {
if(m_undo.canUndo()) {
m_undoAction.setEnabled(true);
m_undoAction.putValue(Action.NAME,
m_undo.getUndoPresentationName());
}
else {
m_undoAction.setEnabled(false);
m_undoAction.putValue(Action.NAME, "Undo");
}
if(m_undo.canRedo()) {
m_redoAction.setEnabled(true);
m_redoAction.putValue(Action.NAME,
m_undo.getRedoPresentationName());
}
else {
m_redoAction.setEnabled(false);
m_redoAction.putValue(Action.NAME, "Redo");
}
}
public Document getDocument() { return m_doc; }
public JTextPane getTextPane() { return m_monitor; }
public void setSelection(int xStart, int xFinish, boolean moveUp) {
if (moveUp) {
m_monitor.setCaretPosition(xFinish);
m_monitor.moveCaretPosition(xStart);
}
else
m_monitor.select(xStart, xFinish);
m_xStart = m_monitor.getSelectionStart();
m_xFinish = m_monitor.getSelectionEnd();
}
public static void main(String argv[]) {
new MyNewEditor();
}
class Undoer implements UndoableEditListener
{
public Undoer() {
m_undo.die();
updateUndo();
}
public void undoableEditHappened(UndoableEditEvent e) {
UndoableEdit edit = e.getEdit();
m_undo.addEdit(e.getEdit());
updateUndo();
}
}
}
// Class SmallButton unchanged from section 4.8
class SimpleFilter extends javax.swing.filechooser.FileFilter {
private String m_description = null;
private String m_extension = null;
public SimpleFilter(String extension, String description) {
m_description = description;
m_extension = "."+extension.toLowerCase();
}
public String getDescription() {
return m_description;
}
public boolean accept(File f) {
if (f == null)
return false;
if (f.isDirectory())
return true;
return f.getName().toLowerCase().endsWith(m_extension);
}
}
// Class SmallToggleButton unchanged from section 4.8
class SmallToggleButton extends JToggleButton implements ItemListener
{
protected Border m_raised;
protected Border m_lowered;
public SmallToggleButton(boolean selected, ImageIcon imgUnselected,
ImageIcon imgSelected, String tip)
{
super(imgUnselected, selected);
setHorizontalAlignment(CENTER);
setBorderPainted(true);
m_raised = new BevelBorder(BevelBorder.RAISED);
m_lowered = new BevelBorder(BevelBorder.LOWERED);
setBorder(selected ? m_lowered : m_raised);
setMargin(new Insets(1,1,1,1));
setToolTipText(tip);
setRequestFocusEnabled(false);
setSelectedIcon(imgSelected);
addItemListener(this);
}
public float getAlignmentY() { return 0.5f; }
public void itemStateChanged(ItemEvent e) {
setBorder(isSelected() ? m_lowered : m_raised);
}
}
// Class ColorMenu unchanged from section 12.5
class ColorMenu extends JMenu
{
protected Border m_unselectedBorder;
protected Border m_selectedBorder;
protected Border m_activeBorder;
protected Hashtable m_panes;
protected ColorPane m_selected;
public ColorMenu(String name) {
super(name);
m_unselectedBorder = new CompoundBorder(
new MatteBorder(1, 1, 1, 1, getBackground()),
new BevelBorder(BevelBorder.LOWERED,
Color.white, Color.gray));
m_selectedBorder = new CompoundBorder(
new MatteBorder(2, 2, 2, 2, Color.red),
new MatteBorder(1, 1, 1, 1, getBackground()));
m_activeBorder = new CompoundBorder(
new MatteBorder(2, 2, 2, 2, Color.blue),
new MatteBorder(1, 1, 1, 1, getBackground()));
JPanel p = new JPanel();
p.setBorder(new EmptyBorder(5, 5, 5, 5));
p.setLayout(new GridLayout(8, 8));
m_panes = new Hashtable();
int[] values = new int[] { 0, 128, 192, 255 };
for (int r=0; r<values.length; r++) {
for (int g=0; g<values.length; g++) {
for (int b=0; b<values.length; b++) {
Color c = new Color(values[r], values[g], values[b]);
ColorPane pn = new ColorPane(c);
p.add(pn);
m_panes.put(c, pn);
}
}
}
add(p);
}
public void setColor(Color c) {
Object obj = m_panes.get(c);
if (obj == null)
return;
if (m_selected != null)
m_selected.setSelected(false);
m_selected = (ColorPane)obj;
m_selected.setSelected(true);
}
public Color getColor() {
if (m_selected == null)
return null;
return m_selected.getColor();
}
public void doSelection() {
fireActionPerformed(new ActionEvent(this,
ActionEvent.ACTION_PERFORMED, getActionCommand()));
}
class ColorPane extends JPanel implements MouseListener
{
protected Color m_c;
protected boolean m_selected;
public ColorPane(Color c) {
m_c = c;
setBackground(c);
setBorder(m_unselectedBorder);
String msg = "R "+c.getRed()+", G "+c.getGreen()+
", B "+c.getBlue();
setToolTipText(msg);
addMouseListener(this);
}
public Color getColor() { return m_c; }
public Dimension getPreferredSize() {
return new Dimension(15, 15);
}
public Dimension getMaximumSize() { return getPreferredSize(); }
public Dimension getMinimumSize() { return getPreferredSize(); }
public void setSelected(boolean selected) {
m_selected = selected;
if (m_selected)
setBorder(m_selectedBorder);
else
setBorder(m_unselectedBorder);
}
public boolean isSelected() { return m_selected; }
public void mousePressed(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
setColor(m_c);
MenuSelectionManager.defaultManager().clearSelectedPath();
doSelection();
}
public void mouseEntered(MouseEvent e) {
setBorder(m_activeBorder);
}
public void mouseExited(MouseEvent e) {
setBorder(m_selected ? m_selectedBorder :
m_unselectedBorder);
}
}
}
class OpenList extends JPanel
implements ListSelectionListener, ActionListener
{
protected JLabel m_title;
protected JTextField m_text;
protected JList m_list;
protected JScrollPane m_scroll;
public OpenList(String[] data, String title) {
setLayout(null);
m_title = new JLabel(title, JLabel.LEFT);
add(m_title);
m_text = new JTextField();
m_text.addActionListener(this);
add(m_text);
m_list = new JList(data);
m_list.setVisibleRowCount(4);
m_list.addListSelectionListener(this);
m_scroll = new JScrollPane(m_list);
add(m_scroll);
}
public OpenList(String title, int numCols) {
setLayout(null);
m_title = new JLabel(title, JLabel.LEFT);
add(m_title);
m_text = new JTextField(numCols);
m_text.addActionListener(this);
add(m_text);
m_list = new JList();
m_list.setVisibleRowCount(4);
m_list.addListSelectionListener(this);
m_scroll = new JScrollPane(m_list);
add(m_scroll);
}
public void appendResultSet(ResultSet results, int index,
boolean toTitleCase)
{
m_text.setText("");
DefaultListModel model = new DefaultListModel();
try {
while (results.next()) {
String str = results.getString(index);
if (toTitleCase)
str = Utils.titleCase(str);
model.addElement(str);
}
}
catch (SQLException ex) {
System.err.println("appendResultSet: "+ex.toString());
}
m_list.setModel(model);
if (model.getSize() > 0)
m_list.setSelectedIndex(0);
}
public void setSelected(String sel) {
m_list.setSelectedValue(sel, true);
m_text.setText(sel);
}
public String getSelected() { return m_text.getText(); }
public void setSelectedInt(int value) {
setSelected(Integer.toString(value));
}
public int getSelectedInt() {
try {
return Integer.parseInt(getSelected());
}
catch (NumberFormatException ex) { return -1; }
}
public void valueChanged(ListSelectionEvent e) {
Object obj = m_list.getSelectedValue();
if (obj != null)
m_text.setText(obj.toString());
}
public void actionPerformed(ActionEvent e) {
ListModel model = m_list.getModel();
String key = m_text.getText().toLowerCase();
for (int k=0; k<model.getSize(); k++) {
String data = (String)model.getElementAt(k);
if (data.toLowerCase().startsWith(key)) {
m_list.setSelectedValue(data, true);
break;
}
}
}
public void addListSelectionListener(ListSelectionListener lst) {
m_list.addListSelectionListener(lst);
}
public Dimension getPreferredSize() {
Insets ins = getInsets();
Dimension d1 = m_title.getPreferredSize();
Dimension d2 = m_text.getPreferredSize();
Dimension d3 = m_scroll.getPreferredSize();
int w = Math.max(Math.max(d1.width, d2.width), d3.width);
int h = d1.height + d2.height + d3.height;
return new Dimension(w+ins.left+ins.right,
h+ins.top+ins.bottom);
}
public Dimension getMaximumSize() {
Insets ins = getInsets();
Dimension d1 = m_title.getMaximumSize();
Dimension d2 = m_text.getMaximumSize();
Dimension d3 = m_scroll.getMaximumSize();
int w = Math.max(Math.max(d1.width, d2.width), d3.width);
int h = d1.height + d2.height + d3.height;
return new Dimension(w+ins.left+ins.right,
h+ins.top+ins.bottom);
}
public Dimension getMinimumSize() {
Insets ins = getInsets();
Dimension d1 = m_title.getMinimumSize();
Dimension d2 = m_text.getMinimumSize();
Dimension d3 = m_scroll.getMinimumSize();
int w = Math.max(Math.max(d1.width, d2.width), d3.width);
int h = d1.height + d2.height + d3.height;
return new Dimension(w+ins.left+ins.right,
h+ins.top+ins.bottom);
}
public void doLayout() {
Insets ins = getInsets();
Dimension d = getSize();
int x = ins.left;
int y = ins.top;
int w = d.width-ins.left-ins.right;
int h = d.height-ins.top-ins.bottom;
Dimension d1 = m_title.getPreferredSize();
m_title.setBounds(x, y, w, d1.height);
y += d1.height;
Dimension d2 = m_text.getPreferredSize();
m_text.setBounds(x, y, w, d2.height);
y += d2.height;
m_scroll.setBounds(x, y, w, h-y);
}
}
class ColorComboRenderer extends JPanel implements ListCellRenderer
{
protected Color m_color = Color.black;
protected Color m_focusColor =
(Color) UIManager.get("List.selectionBackground");
protected Color m_nonFocusColor = Color.white;
public Component getListCellRendererComponent(JList list,
Object obj, int row, boolean sel, boolean hasFocus)
{
if (hasFocus || sel)
setBorder(new CompoundBorder(
new MatteBorder(2, 10, 2, 10, m_focusColor),
new LineBorder(Color.black)));
else
setBorder(new CompoundBorder(
new MatteBorder(2, 10, 2, 10, m_nonFocusColor),
new LineBorder(Color.black)));
if (obj instanceof Color)
m_color = (Color) obj;
return this;
}
public void paintComponent(Graphics g) {
setBackground(m_color);
super.paintComponent(g);
}
}
class FindDialog extends JDialog
{
protected MyNewEditor m_owner;
protected JTabbedPane m_tb;
protected JTextField m_txtFind1;
protected JTextField m_txtFind2;
protected Document m_docFind;
protected Document m_docReplace;
protected ButtonModel m_modelWord;
protected ButtonModel m_modelCase;
protected ButtonModel m_modelUp;
protected ButtonModel m_modelDown;
protected int m_searchIndex = -1;
protected boolean m_searchUp = false;
protected String m_searchData;
public FindDialog(MyNewEditor owner, int index) {
super(owner, "Find and Replace", false);
m_owner = owner;
m_tb = new JTabbedPane();
// "Find" panel
JPanel p1 = new JPanel(new BorderLayout());
JPanel pc1 = new JPanel(new BorderLayout());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -