?? notepad.java
字號:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.swing.undo.*;
public class Notepad extends JFrame implements ActionListener
{
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenu editMenu;
private JMenu formatMenu;
private JMenu helpMenu;
private JMenuItem[] menuItem = new JMenuItem[18];
private String[] menuItemNames = { "新建(N) Ctrl+N", "打開(O)... Ctrl+O",
"保存(S) Ctrl+S", "另存為(A)...", "退出(X)", "撤消(U) Ctrl+Z",
"重做(D) Ctrl+Y", "剪切(T) Ctrl+X", "復制(C) Ctrl+C",
"粘貼(P) Ctrl+V", "刪除(L) Del", "查找(F)... Ctrl+F",
"查找下一個(N) F3", "替換(R)... Ctrl+H", "全選(A) Ctrl+A",
"自動換行(W)", "字體(F)...", "關于記事本(A)" };
private char[] mnemonics = { 'N', 'O', 'S', 'A', 'X', 'U','D', 'T', 'C', 'P', 'L', 'F',
'N', 'R', 'A', 'W', 'F', 'A' };
private JTextArea text;
private Font font = new Font( "宋體", Font.PLAIN, 12 );
private boolean hasSaved = true;
private UndoManager undoManager = new UndoManager();
private String openedFileName = "", openedFilePath = "";
private StringBuffer findString = new StringBuffer();
private StringBuffer replaceString = new StringBuffer();
private Rectangle rect;
public static void main(String[] args)
{
Notepad note = new Notepad();
note.setSize( 800, 600 );
note.setLocation(100, 100 );
note.setVisible( true );
}
public Notepad()
{
super( "無標題-記事本" );
this.addWindowListener(
new WindowAdapter()
{
public void windowClosing( WindowEvent e )
{
if ( isSaved() )
{
System.exit( 0 );
}
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
}
);
JMenuBar menuBar = new JMenuBar();
setJMenuBar( menuBar );
int i = 0;
text = new JTextArea();
fileMenu = new JMenu( "文件(F)" );
fileMenu.setFont( font );
fileMenu.setMnemonic( 'F' );
for( ; i < 5; i ++ )
{
menuItem[i] = new JMenuItem( menuItemNames[i] );
menuItem[i].setMnemonic( mnemonics[i] );
menuItem[i].setFont( font );
menuItem[i].addActionListener( this );
fileMenu.add( menuItem[i] );
if( i == 3 ) fileMenu.addSeparator();
}
menuBar.add( fileMenu );
editMenu = new JMenu( "編輯(E)" );
editMenu.setFont( font );
editMenu.setMnemonic( 'E' );
editMenu.addMenuListener(
new MenuListener()
{
public void menuCanceled( MenuEvent e )
{
}
public void menuDeselected( MenuEvent e )
{
}
public void menuSelected( MenuEvent e )
{
String selectedText = text.getSelectedText();
boolean canCut = ( selectedText != null && selectedText.length() > 0 );
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable t = cb.getContents( this );
menuItem[5].setEnabled( undoManager.canUndo() );
menuItem[6].setEnabled( undoManager.canRedo() );
menuItem[7].setEnabled( canCut );
menuItem[8].setEnabled( canCut );
menuItem[9].setEnabled( t.isDataFlavorSupported( DataFlavor.stringFlavor ) );
menuItem[10].setEnabled( canCut );
boolean isEmpty = text.getText().equals( "" );
for( int i = 11; i < 14; i ++)
{
menuItem[i].setEnabled( !isEmpty );
}
}
}
);
for( ; i < 15; i ++ )
{
menuItem[i] = new JMenuItem( menuItemNames[i] );
menuItem[i].setMnemonic( mnemonics[i] );
menuItem[i].setFont( font );
menuItem[i].addActionListener( this );
editMenu.add( menuItem[i] );
if( i == 6 || i == 10 || i == 13 ) editMenu.addSeparator();
}
menuBar.add( editMenu );
formatMenu = new JMenu( "格式(O)" );
formatMenu.setFont( font );
formatMenu.setMnemonic( 'O' );
for( ; i < 17; i ++ )
{
if( i == 15 )
{
menuItem[i] = new JCheckBoxMenuItem( menuItemNames[i] );
menuItem[i].setSelected( true );
text.setLineWrap( true );
}
else menuItem[i] = new JMenuItem( menuItemNames[i] );
menuItem[i].setMnemonic( mnemonics[i] );
menuItem[i].setFont( font );
menuItem[i].addActionListener( this );
formatMenu.add( menuItem[i] );
}
menuBar.add( formatMenu );
helpMenu = new JMenu( "幫助(H)" );
helpMenu.setFont( font );
helpMenu.setMnemonic( 'H' );
menuItem[i] = new JMenuItem( menuItemNames[i] );
menuItem[i].setMnemonic( mnemonics[i] );
menuItem[i].setFont( font );
menuItem[i].addActionListener( this );
helpMenu.add( menuItem[i] );
menuBar.add( helpMenu );
text.setFont( new Font( "宋體", Font.PLAIN, 18 ) );
text.addKeyListener(
new KeyAdapter()
{
public void keyPressed( KeyEvent e )
{
int i = -1;
String keyText = e.getKeyText( e.getKeyCode() );
String modifierKey = e.getKeyModifiersText( e.getModifiers() );
if( modifierKey.equals( "" ) )
{
if( keyText.equals( "F3" ) )
{
i = 12;
}
else return;
}
else if( modifierKey.equals( "Ctrl" ) )
{
int ch = e.getKeyCode();
switch( ch )
{
case 78:
i = 0;
break;
case 79:
i = 1;
break;
case 83:
i = 2;
break;
case 90:
i = 5;
break;
case 89:
i = 6;
break;
case 70:
i = 11;
break;
case 72:
i = 13;
break;
case 65:
i = 14;
break;
default:
return;
}
}
actions( menuItem[i], menuItemNames[i] );
}
}
);
text.addMouseListener(
new MouseAdapter()
{
public void mouseReleased( MouseEvent event )
{
if( event.getModifiers() == MouseEvent.BUTTON3_MASK )
{
JTextArea text = ( JTextArea ) event.getSource();
String selectedText = text.getSelectedText();
boolean canCut = ( selectedText != null && selectedText.length() > 0 );
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable t = cb.getContents( this );
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem popupMenuItem[] = new JMenuItem[15];
for( int i = 5; i < 15; i ++ )
{
if( i != 11 && i != 12 && i != 13 )
{
popupMenuItem[i] = new JMenuItem( menuItemNames[i] );
popupMenuItem[i].setMnemonic( mnemonics[i] );
popupMenuItem[i].setFont( font );
if( i == 5 ) popupMenuItem[i].setEnabled( undoManager.canUndo() );
if( i == 6 ) popupMenuItem[i].setEnabled( undoManager.canRedo() );
if( i == 7 || i == 8 || i == 10 ) popupMenuItem[i].setEnabled( canCut );
if( i == 9 ) popupMenuItem[i].setEnabled(
t.isDataFlavorSupported( DataFlavor.stringFlavor ) );
popupMenuItem[i].addActionListener( Notepad.this );
popupMenu.add( popupMenuItem[i] );
if( i == 6 || i == 10 ) popupMenu.addSeparator();
}
}
popupMenu.show( event.getComponent(), event.getX(), event.getY() );
}
}
}
);
text.getDocument().addUndoableEditListener(
new UndoableEditListener()
{
public void undoableEditHappened( UndoableEditEvent e )
{
undoManager.addEdit( e.getEdit() );
}
}
);
text.getDocument().addDocumentListener(
new DocumentListener()
{
public void changedUpdate( DocumentEvent e )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -