Swingを使ってメモ帳を作成しており「元に戻す」機能を追加したいです。
下記サイトを参考に実装しようとしましたが、119行目でエラーが出てしまいます。
エラーの内容は分かっているのですが、私としてはうまい具合にクラス分割したいと思っています。
しかし、そのクラス分割の方法が思いつかないのでご教示いただきたいです。
package component; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.undo.UndoableEdit; import common.FilePopUp; public class MainFrame extends JFrame implements UndoableEditListener { private UndoableEdit undo = null; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainFrame frame = new MainFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MainFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 639, 379); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // ファイルメニュー ここから JMenu faileMenu = new JMenu("ファイル(F) "); faileMenu.setFont(new Font("メイリオ", Font.PLAIN, 15)); menuBar.add(faileMenu); JMenuItem fileSave = new JMenuItem("新規(N) Ctrl+N"); fileSave.setFont(new Font("メイリオ", Font.PLAIN, 15)); fileSave.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(fileSave); JMenuItem fileOpen = new JMenuItem("開く(O)... Ctrl+O"); fileOpen.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { FilePopUp.fileLoad(); } }); fileOpen.setFont(new Font("メイリオ", Font.PLAIN, 15)); fileOpen.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(fileOpen); JMenuItem fileOverwriteSave = new JMenuItem("上書き保存(S) Ctrl+S"); fileOverwriteSave.setFont(new Font("メイリオ", Font.PLAIN, 15)); fileOverwriteSave.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(fileOverwriteSave); JMenuItem fileNameSave = new JMenuItem("名前を付けて保存(A)..."); fileNameSave.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { FilePopUp.fileSave(); } }); fileNameSave.setFont(new Font("メイリオ", Font.PLAIN, 15)); fileNameSave.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(fileNameSave); faileMenu.addSeparator(); JMenuItem filePageConfig = new JMenuItem("ページ設定(U)..."); filePageConfig.setFont(new Font("メイリオ", Font.PLAIN, 15)); filePageConfig.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(filePageConfig); JMenuItem filePagePrint = new JMenuItem("印刷(P)... Ctrl+P"); filePagePrint.setFont(new Font("メイリオ", Font.PLAIN, 15)); filePagePrint.setHorizontalAlignment(SwingConstants.LEFT); faileMenu.add(filePagePrint); faileMenu.addSeparator(); JMenuItem fileMemoExit = new JMenuItem("メモ帳の終了(X)"); fileMemoExit.setHorizontalAlignment(SwingConstants.LEFT); fileMemoExit.setFont(new Font("メイリオ", Font.PLAIN, 15)); faileMenu.add(fileMemoExit); // ファイルメニュー ここまで // 編集メニュー ここから JMenu editMenu = new JMenu("編集(E) "); editMenu.setFont(new Font("メイリオ", Font.PLAIN, 15)); menuBar.add(editMenu); JMenuItem editUndo = new JMenuItem("元に戻す(U) Ctrl+Z"); editUndo.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { // ここに「元に戻す」機能を追加したい!! undoableEditHappened(e); editUndo.setEnabled(undo.canUndo()); } }); editUndo.setHorizontalAlignment(SwingConstants.LEFT); editUndo.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editUndo); editMenu.addSeparator(); JMenuItem editTrim = new JMenuItem("切り取り(T) Ctrl+X"); editTrim.setHorizontalAlignment(SwingConstants.LEFT); editTrim.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editTrim); JMenuItem editCopy = new JMenuItem("コピー(C) Ctrl+C"); editCopy.setHorizontalAlignment(SwingConstants.LEFT); editCopy.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editCopy); JMenuItem editDel = new JMenuItem("削除(L) Del"); editDel.setHorizontalAlignment(SwingConstants.LEFT); editDel.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editDel); editMenu.addSeparator(); JMenuItem editFind = new JMenuItem("検索(F) Ctrl+F"); editFind.setHorizontalAlignment(SwingConstants.LEFT); editFind.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editFind); JMenuItem editFindNext = new JMenuItem("次を検索(N) F3"); editFindNext.setHorizontalAlignment(SwingConstants.LEFT); editFindNext.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editFindNext); JMenuItem editReplace = new JMenuItem("置換(R)... Ctrl+H"); editReplace.setHorizontalAlignment(SwingConstants.LEFT); editReplace.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editReplace); JMenuItem editGoRow = new JMenuItem("行へ移動(G)... Ctrl+G"); editGoRow.setHorizontalAlignment(SwingConstants.LEFT); editGoRow.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editGoRow); editMenu.addSeparator(); JMenuItem editSelectAll = new JMenuItem("すべて選択(A) Ctrl+A"); editSelectAll.setHorizontalAlignment(SwingConstants.LEFT); editSelectAll.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editSelectAll); JMenuItem editTime = new JMenuItem("日付と時刻(D) F5"); editTime.setHorizontalAlignment(SwingConstants.LEFT); editTime.setFont(new Font("メイリオ", Font.PLAIN, 15)); editMenu.add(editTime); // 編集メニュー ここまで // 書式メニュー ここから JMenu fontMenu = new JMenu("書式(O) "); fontMenu.setFont(new Font("メイリオ", Font.PLAIN, 15)); menuBar.add(fontMenu); JMenuItem fontRightReturn = new JMenuItem("右端で折り返す(W) "); fontRightReturn.setFont(new Font("メイリオ", Font.PLAIN, 15)); fontRightReturn.setHorizontalAlignment(SwingConstants.LEFT); fontMenu.add(fontRightReturn); JMenuItem fontFont = new JMenuItem("フォント(F)..."); fontFont.setFont(new Font("メイリオ", Font.PLAIN, 15)); fontFont.setHorizontalAlignment(SwingConstants.LEFT); fontMenu.add(fontFont); // 書式メニュー ここまで // 表示メニュー ここから JMenu viewMenu = new JMenu("表示(E) "); viewMenu.setFont(new Font("メイリオ", Font.PLAIN, 15)); menuBar.add(viewMenu); JMenuItem viewStatus = new JMenuItem("ステータスバー(S)"); viewStatus.setFont(new Font("メイリオ", Font.PLAIN, 15)); viewStatus.setHorizontalAlignment(SwingConstants.LEFT); viewMenu.add(viewStatus); // 表示メニュー ここまで // ヘルプメニュー ここから JMenu helpMenu = new JMenu("ヘルプ(H) "); helpMenu.setFont(new Font("メイリオ", Font.PLAIN, 15)); menuBar.add(helpMenu); JMenuItem helpHelp = new JMenuItem("ヘルプの表示(H)"); helpHelp.setFont(new Font("メイリオ", Font.PLAIN, 15)); helpHelp.setHorizontalAlignment(SwingConstants.LEFT); helpMenu.add(helpHelp); helpMenu.addSeparator(); JMenuItem helpVersion = new JMenuItem("バージョン情報(A)"); helpVersion.setFont(new Font("メイリオ", Font.PLAIN, 15)); helpVersion.setHorizontalAlignment(SwingConstants.LEFT); helpMenu.add(helpVersion); // ヘルプメニュー ここまで getContentPane().setLayout(null); getContentPane().setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setViewportBorder(null); // テキストエリア JTextArea textArea = new JTextArea(); textArea.setFont(new Font("MS ゴシック", Font.PLAIN, 18)); scrollPane.setViewportView(textArea); } @Override public void undoableEditHappened(UndoableEditEvent e) { undo = e.getEdit(); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/04 06:58