import java.awt.*; 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 Frame implements ActionListener, ItemListener { String str = new String(""); TextArea ta; Menu menu, s_menu; MenuItem item1, item2, item3, s_item1, s_item2, s_item3; CheckboxMenuItem c_item; /******************/ /* コンストラクタ */ /******************/ Win (String name, String data) { // Frameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // テキストエリアの追加 Font f = new Font("MS 明朝", Font.PLAIN, 20); ta = new TextArea(4, 25); ta.setFont(f); ta.addMouseListener(new ExitMouse());; add(ta, BorderLayout.SOUTH); // メニューバーとメニューの追加 // メニューバーの追加 MenuBar menu_bar = new MenuBar(); menu = new Menu("メニュー"); menu.setFont(f); menu_bar.add(menu); setMenuBar(menu_bar); // メニュー内容の追加 // メニュー item1 = new MenuItem("メニュー1"); item1.setShortcut(new MenuShortcut('m')); item1.addActionListener(this); menu.add(item1); item2 = new MenuItem("メニュー2", new MenuShortcut('m', true)); item2.addActionListener(this); menu.add(item2); menu.addSeparator(); // チェック項目 c_item = new CheckboxMenuItem("表示"); c_item.addActionListener(this); c_item.addItemListener(this); menu.add(c_item); menu.addSeparator(); // サブメニュー s_menu = new Menu("編集"); s_item1 = new MenuItem("コピー"); s_item1.addActionListener(this); s_item1.setEnabled(false); s_menu.add(s_item1); s_item2 = new MenuItem("切り取り"); s_item2.addActionListener(this); s_item2.setEnabled(false); s_menu.add(s_item2); s_item3 = new MenuItem("貼り付け"); s_item3.addActionListener(this); s_item3.setEnabled(false); s_menu.add(s_item3); menu.add(s_menu); menu.addSeparator(); // メニュー(終了) item3 = new MenuItem("終了"); 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().length() == 0) s_item1.setEnabled(false); else s_item1.setEnabled(true); if (ta.getSelectedText().length() == 0) 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() instanceof MenuItem && e.getActionCommand().equals("メニュー1")) ta.setText("メニュー1が選択\n"); // メニュー2 if (e.getSource() == item2) // 上と異なるが,この方法でも可 ta.setText("メニュー2が選択\n"); // 選択項目 if (e.getSource() == c_item) { if (c_item.getState()) c_item.setState(false); else c_item.setState(true); } // 編集 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); } /**********************************************/ /* チェックボックスの状態が変化すたときの処理 */ /**********************************************/ public void itemStateChanged(ItemEvent e) { if (e.getItemSelectable() == c_item) { if (c_item.getState()) ta.setText("状態:on\n"); else ta.setText("状態:off\n"); } } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }