import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; public class Test { public static void main (String[] args) { Win win = new Win("Test Window", "Test Data"); } } /*******************/ /* クラスWinの定義 */ /*******************/ class Win extends JFrame implements ActionListener { String str = new String(""); JTextArea ta; JMenu menu, s_menu; JMenuItem item1, item2, item3, s_item1, s_item2, s_item3; /******************/ /* コンストラクタ */ /******************/ Win (String name, String data) { // Frameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // テキストエリアの追加 Font f = new Font("MS 明朝", Font.PLAIN, 20); Container cp = getContentPane(); ta = new JTextArea(4, 25); ta.setFont(f); ta.addMouseListener(new ExitMouse());; cp.add(ta, BorderLayout.SOUTH); // メニューバー追加 JMenuBar menu_bar = new JMenuBar(); // 編集メニューの追加 menu = new JMenu("編集"); menu.setFont(f); menu_bar.add(menu); // メニューバーの設定 setJMenuBar(menu_bar); // 編集メニューの内容の追加 // 表示メニュー item1 = new JMenuItem("menu 1", 'm'); item1.setIcon(new ImageIcon("budou.gif")); item1.addActionListener(this); menu.add(item1); item2 = new JMenuItem("menu 2"); item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK)); item2.setIcon(new ImageIcon("sakuranbo.gif")); item2.addActionListener(this); menu.add(item2); menu.addSeparator(); // 編集(サブメニュー) s_menu = new JMenu("編集"); s_item1 = new JMenuItem("コピー"); s_item1.addActionListener(this); s_item1.setEnabled(false); s_menu.add(s_item1); s_item2 = new JMenuItem("切り取り"); s_item2.addActionListener(this); s_item2.setEnabled(false); s_menu.add(s_item2); s_item3 = new JMenuItem("貼り付け"); s_item3.addActionListener(this); s_item3.setEnabled(false); s_menu.add(s_item3); menu.add(s_menu); menu.addSeparator(); // メニュー(終了) item3 = new JMenuItem("終了"); item3.addActionListener(this); menu.add(item3); // Windowの大きさ setSize(300, 300); // ウィンドウを表示 setVisible(true); // イベントアダプタ addWindowListener(new WinEnd()); } /******************************/ /* 上,左,下,右の余白の設定 */ /******************************/ public Insets getInsets() { return new Insets(35, 10, 10, 10); } /****************************************/ /* マウスがTextAreaの外に出たときの処理 */ /****************************************/ class ExitMouse extends MouseAdapter { public void mouseExited(MouseEvent e) { if (ta.getSelectedText() == null) s_item1.setEnabled(false); else s_item1.setEnabled(true); if (ta.getSelectedText() == null) s_item2.setEnabled(false); else s_item2.setEnabled(true); if (str.length() == 0) s_item3.setEnabled(false); else s_item3.setEnabled(true); } } /**********************************/ /* メニューが選択されたときの処理 */ /**********************************/ public void actionPerformed(ActionEvent e) { // メニュー1 if (e.getSource() == item1) ta.setText("メニュー1が選択\n"); // メニュー2 if (e.getSource() == item2) ta.setText("メニュー2が選択\n"); // 編集 if (e.getSource() == s_item1 || e.getSource() == s_item2 || e.getSource() == s_item3) { if (e.getSource() == s_item1) { str = ta.getSelectedText(); s_item3.setEnabled(true); } else if (e.getSource() == s_item2) { str = ta.getSelectedText(); int k1 = ta.getSelectionStart(); int k2 = ta.getSelectionEnd(); ta.replaceRange("", k1, k2); s_item1.setEnabled(false); s_item2.setEnabled(false); s_item3.setEnabled(true); } else { int k3 = ta.getCaretPosition(); ta.insert(str, k3); s_item1.setEnabled(false); s_item2.setEnabled(false); } } // 終了 if (e.getSource() == item3) System.exit(0); } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }