• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Java(eclipse)のundoについて)

Java(eclipse)のundoについて

このQ&Aのポイント
  • Javaのeclipseで電気回路の回路エディタを作っている際に、素子を間違って出した時の「戻る」ボタンを追加したいのですが、undoについてよくわかりません。
  • 知人に聞いたり調べたりして、コード内でhistoryやStackなどを使って記録をつけ、それを遡らせることでundo機能を実装することができると聞きましたが、具体的な方法がわかりません。
  • どなたか詳しい方、undo機能の実装方法についてご助言いただけませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1521/2215)
回答No.1

ひとまず、一段階だけundoできるように作ってみてはいかがですか。 1. "前の状態"を覚えておくための変数を用意する。最初は空にしておく。 2. 画面上に素子を足す・移動する・消す、回路をつなぐなどの編集操作が発生したら 2-1. 編集前の回路の状態を"前の状態"として覚える。 2-2. 実際の編集操作を行い、回路の状態を更新する。 3. undo操作を指示されたら 3-1. "前の状態"が空であれば、undoはできないので何もしない。 3-2. "前の状態"が空でなければ、現在の回路の状態を破棄して"前の状態"に戻す。その後"前の状態"は空にする。 4. 2~3を繰り返す。その他、必要であればファイルに保存するなどの処理を行う。 "前の状態"をどうやって覚えるかに決まったやり方はありません。回路全体の状態を毎回覚えておくのは効率が悪いので、変化のあった部分だけ覚えておいて3-2ではその逆操作を行う(素子を消す操作の逆操作なら、消した素子を復活させる)ほうが普通です。 一段階だけのundoができるようになったら、"前の状態"を覚える変数を二段階分以上に増やせるようにしてみてください。

lovesundays
質問者

お礼

ありがとうございました! 参考にさせていただきます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Visual EditorによるJavaプログラミング

    「Eclipse+Visual EditorによるJavaプログラミング」という本を買いました。Visual Editorというのは、具体的に何が出来るのでしょうか?また詳しい使い方が載っている本・HP襲えてください。

    • ベストアンサー
    • Java
  • Eclipse3でVisualEditorが起動しません

    「エディターのオープンに問題があります。」 エディターのインスタンスを生成できません というエラーが出ます。 Eclipseは3.01で日本語化してます。VEは1.0.2.2、EMFは2.1.0、GEFは3.1.0を入れました。OSはWin2000です。 「ソーテック社の実践Eclipse3 Javaプログラミング入門」という本の手順で進んでいるのですが、先へ進めません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • eclipse+Visual Editorでアプリケーションを作成説明したサイトは?

    ・eclipse ・Visual Editor の初心者でも解るような使い方を説明したサイト はご存じでしょうか? 秀和システムの ”Eclipse+Visual EditorによるJavaプログラミング” を買ってもいいのですが、ネット上に 同じような事を説明したサイトがあれば利用したいと 思い質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JFrame,アプレット,Webブラウザ

    Java swing eclipseにてゲームプログラミング(RPG)を作っていますが JFrame、アプレット、Webブラウザに厳密な違いというのはありますでしょうか? 詳しい方が入れば、教えて頂きたいです。よろしくお願いします。

    • ベストアンサー
    • Java
  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • EclipseでJSPファイルを開こうとするとエラー

    お世話になります。 Eclipse(3.2.0)を使用して、パッケージ・エクスプローラに表示されているJSPファイルをダブルクリックで表示しようとすると、 「エラーが発生しました。詳細については、エラー・ログを参照してください。」 がポップアップで表示されます。 /workspace/.metadata/.log を見ると、以下のように表示されています。 ---------- !ENTRY org.eclipse.jface 4 2 2009-01-28 17:04:00.674 !MESSAGE プラグイン "org.eclipse.jface" からのコードの起動で問題が発生しました。 !STACK 0 java.lang.NoSuchMethodError: java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z at tk.eclipse.plugin.htmleditor.HTMLProjectParams.getBooleanValue(HTMLProjectParams.java:229) at tk.eclipse.plugin.htmleditor.HTMLProjectParams.load(HTMLProjectParams.java:217) at tk.eclipse.plugin.htmleditor.HTMLProjectParams.<init>(HTMLProjectParams.java:50) 【長いので割愛。ログを添付します】 ---------- 結局、JSPファイルが表示できず、「Amateras JSPエディタ」というタブだけ表示されている状態です。 JSPファイルを右クリックし、[アプリケーションから開く]→[テキスト・エディタ]で表示することはできますが、文字が黒一色で分かりにくいです。 ダブルクリックでエラーを表示させずに表示することは可能でしょうか? よろしくお願いいたします。

  • Java 15パズルを作ったのですが・・・

    こんにちは。 趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 Javaで15パズルを、eclipseをしろうとなりに使って 作ってみたのですが、 以下のURLにソースコードの全文を 載せてありますので、 (判定、完成させたときの何らかのイベントは  まだできたいない途中のものですが・・・) http://www.eonet.ne.jp/~mycabinet よろしければ、500*500のピース用、背景用の jpg画像を用意していただき、 imageという名前のフォルダに格納して 実行して動作を試していただきたいのですが・・・ その上で、いくつか質問させていただきたいのです。 (1) JPanelを継承したクラスにswing のTimerクラスを 持たせ、ピースの移動をアニメーションのように 描画させようとしたのですが、 動くことは動くのですが、 簡単に言えばダブルバッファリングが必要なように 描画されてしまいます。 (2) BlankPieceクラスの描画は スーパークラスの抽象メソッドを オーバーライドして何もしないように すれば、背景の画像が描画される、 と思ったのですが、 グレーの通常のパネルのようなものが 描画されてしまいます。 以上の点をどのように修正すれば よいのでしょうか? また、修正できたとして、 それをアプレットにするには、 どのようにすればよいのでしょうか? ご存知の方よろしければ、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのCanvasを使用する描画

    今日は! repaintからCanvasの中のpaintルーチンを起動して描画を行なっています。 (下記のプログラム参照) ボタンを押すごとに、キャンバスに違った内容の書込みを行ないます。 painルーチンが起動する度に、既に書込んだキャンバスの内容がクリヤーされて 新規にキャンバスに書込みが行われて居ると思います。 Q1)キャンバスの内容をクリヤーすることなく、既に書込んだキャンバスの内容を 残して、その上に書込む方法はありませんか? (クリヤーのための指令は、出していないと思っています) ご教授の程、宜しくお願いします。 //================================ import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class ShapeTest1 extends JFrame{ int sw=0; myCanvasPanel myCanvas; public static void main(String[] args){ // JFrame frame = new JFrame(); ShapeTest1 frame=new ShapeTest1(); } ShapeTest1(){ JFrame frame=new JFrame(); // ShapeTest1 app = new ShapeTest1(); // frame.getContentPane().add(app); frame.setTitle("タイトル"); frame.setBounds(10, 10, 300,220); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // frame.setVisible(true); //North========================= JPanel p1=new JPanel(); myCtlPanel myCtl=new myCtlPanel(p1) ; // frame.getContentPane().add(p1,BorderLayout.SOUTH); frame.getContentPane().add(p1,BorderLayout.NORTH); //===================================== JPanel p2=new JPanel(); myCanvas=new myCanvasPanel(p2); p2.add(myCanvas); frame.getContentPane().add(p2,BorderLayout.CENTER); frame.setVisible(true); } //=========================== class myCtlPanel extends JFrame{ myCtlPanel(JPanel p){ /* //領域のサイズ設定 setSize(300,50); //領域のサイズ取得 Dimension dimension = getSize(); */ Button button1=new Button("button1"); button1.addActionListener(new TimButton1()); p.add(button1); } } class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ if(sw==0){ sw=1; } else{ sw=0; } myCanvas.repaint(); //ng System.out.println("TimButton1 sw="+sw); } } class myCanvasPanel extends Canvas{ myCanvasPanel(JPanel p){ //領域のサイズ設定 setSize(300,150); //領域のサイズ取得 Dimension dimension = getSize(); // p.add(this); } // public void paintComponent(Graphics g){ //repaint()では、起動されない public void paint(Graphics g){ //repaint()では、起動 Graphics2D g2 = (Graphics2D)g; System.out.println("Paint sw="+sw); if(sw==0){ //================================================ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); //============================================== g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } else{ g2.setPaint(Color.RED); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 140.0d)); } } } }

    • ベストアンサー
    • Java
  • Java JFrameにJPanelを・・・

    こんにちは。趣味でプログラミングをしているものです。 さっそくですが、質問させていただきます。 Java で電卓を作っているのですが、 文具店で1000円くらいで販売している電卓を再現したいのですが、 いろいろなボタンの操作はなんとなくわかってきたのですが、 電卓のGUIについて質問させていただきます。 JFrame を継承したクラスに背景の画像を描画し その上に、計算の経過、結果を表示するJPanelを 継承したクラスのインスタンスを 特定の座標に配置したいのですが、 うまくいきません。 以下に自分の作ったコードを載せますので、 どこが悪いのか、教えていただけないでしょうか。 よろしくお願いします。 package test01_frame; import java.awt.*; import javax.swing.*; public class TestFrame extends JFrame { Image bgimage; JPanel jp01; TestFrame() { super(); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); setSize( 384, 576 ); setLocationRelativeTo( null ); bgimage = new ImageIcon( "images/image01.jpg").getImage(); repaint(); //コメントアウトした部分がわからない箇所です。 //jp01 = new JPanel(); //jp01.setPreferredSize( new Dimension( 360, 50 )); //jp01.setBackground(Color.RED); //add( jp01 ); //jp01.setLocation( new Point( 10, 30 )); setVisible( true ); } public void update( Graphics g ) { paint( g ); } public void paint( Graphics g ) { g.drawImage( bgimage, 0, 0, null ); } /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ new TestFrame(); } }

    • ベストアンサー
    • Java
  • java swing での質問です。

    javaのプログラミングをeclipseでしているのですが swingで行き詰ってしまいました。 タブペインを使いタブパネルを作り、その中にボタンを配置したのですが、 ボタンの位置をsetBoundsで動かすことができませんでした。 他の命令を使わなければならないのでしょうか? プログラミング自体が初心者のため、説明に不備があると思いますが 助けていただけると幸いです。 ひどいプログラミングかと思いますが張らせていただきました package gui; import java.awt.*; import javax.swing.*; public class ReisyokuMenu extends JFrame{ /*serialVersionUID*/ private static final long serialVersionUID=1L; /*コンポーネント作成*/ JButton syokuzaiBtn = new JButton("食材一覧"); JButton syoumiBtn = new JButton("賞味期限順"); JButton bunruiBtn = new JButton("分類"); JButton returnBtn=new JButton("Topへ"); JPanel tabPanel1 = new JPanel(); JPanel tabPanel2 = new JPanel(); JTabbedPane tabbedpane = new JTabbedPane(); public ReisyokuMenu(){ /*Closeボタンでアプリケーションが終了しないように設定*/ setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); /*フレームサイズを変更できないように設定*/ setResizable(false); /*フレームコンテナのインスタンスを生成*/ Container cPane = getContentPane(); /*レイアウトマネジャを利用しない(座標を指定する)*/ cPane.setLayout(null); setLocationRelativeTo(null); setSize(400, 380);//setBoundsはy、x、幅、高さを指定するのでsetLocationRelativeToで位置指定をする為に使用。 setTitle("一人暮らし支援ツール");//アプリケーションタイトルを入れる tabbedpane.addTab("食材を見る", tabPanel1); tabbedpane.addTab("食材を探す", tabPanel2); tabPanel1.add(syokuzaiBtn); tabPanel1.add(syoumiBtn); tabPanel1.add(bunruiBtn); syokuzaiBtn.setLocation(50, 80);//「選択」ボタン syoumiBtn.setBounds(10,10,325,120); bunruiBtn.setBounds(10,270,90,40); tabPanel2.add(new JLabel("食材名:")); tabPanel2.add(new JTextField("", 10)); setContentPane(tabbedpane); } public void setVisible(boolean isVisible){ if(isVisible){ /*フレームの表示位置を指定(x,y)*/ setLocation(200,200); } /*フレームを表示*/ super.setVisible(isVisible); } }

このQ&Aのポイント
  • 印刷できません32というメッセージが表示されています。手順に従って紙詰まりの確認やメンテナンスメニューも試したり、主電源落としてみましたが、変わりません。
  • Windows8で印刷できません32というメッセージが表示されています。紙詰まりの確認やメンテナンスメニューも試したり、主電源落としてみましたが、問題は解決しません。
  • ブラザーMFC J997DNで印刷できません32というメッセージが表示されています。紙詰まりの確認やメンテナンスメニューも試したり、主電源落としてみましたが、解決しません。
回答を見る

専門家に質問してみよう