javaでマウス操作で描画できるペイントのようなものを作っています。
ウィンドウを非表示にして、再表示させると描いた内容が消えてしまう状態です。
原因は、ウィンドウその物に描いている状態で、どこにも保存されていないから再表示したときに消えてしまうのだと思います。
私が考えている解決方法として、マウス操作によって描画されたときに、保存する何かに上書きして、ウィンドウを閉じて開いたときに保存されたものを表示できればいいと思っています。
しかし、今描いているものをファイルに保存するやり方と、ウィンドウを「開いたとき」に保存されたものを表示するという命令をどのように実現できるか分からず困っています。
皆様のお力をおかしください。よろしくお願いします。
java
1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4import javax.swing.event.*; 5 6public class MyPanel extends JPanel implements MouseListener,MouseMotionListener{ 7 private int xold,yold; 8 private int color; 9 private boolean drawFlag = true; 10 11 //セッター 12 public void setColor(int color){ 13 this.color = color; 14 } 15 public void setDrawFlag(boolean drawFlag){ 16 this.drawFlag = drawFlag; 17 } 18 19 public MyPanel(){ 20 setBackground(Color.white); // 背景を白に設定 21 setPreferredSize(new Dimension(640, 480)); 22 this.addMouseListener(this);//クリック 23 this.addMouseMotionListener(this);//カーソル 24 } 25 26 public void mousePressed(MouseEvent e) { 27 this.xold = e.getX(); 28 this.yold = e.getY(); 29 30 //stamp 31 if(this.drawFlag == false){ 32 Graphics g = this.getGraphics(); 33 g.drawOval(this.xold, this.yold, 128, 64); 34 } 35 } // マウスボタンが押されたとき 36public void mouseReleased(MouseEvent e) {} // マウスボタンが離されたとき 37 public void mouseClicked(MouseEvent e) {} // マウスボタンがクリックされた(押して離された)とき 38 public void mouseEntered(MouseEvent e) {} // マウスカーソルが部品内に入ったとき 39 public void mouseExited(MouseEvent e) {} // マウスカーソルが部品外に出たとき 40 41 public void mouseMoved(MouseEvent e) {} // マウスが動いたとき 42 public void mouseDragged(MouseEvent e) { 43 int x = e.getX(); // マウスカーソルのX座標と 44 int y = e.getY(); // Y座標を調べ 45 if(this.drawFlag == true){ 46 Graphics g = this.getGraphics(); // OSからペンを借り 47 if(this.color == 1){g.setColor(Color.BLACK);} 48 if(this.color == 2){g.setColor(Color.WHITE);} 49 if(this.color == 3){g.setColor(Color.RED);} 50 if(this.color == 4){g.setColor(Color.BLUE);} 51 g.drawLine(this.xold, this.yold, x, y); // マウスカーソルの位置に図形を描画する 52 g.dispose(); 53 this.xold = x; 54 this.yold = y; 55 } 56 } // マウスがドラッグされたとき 57}
java
1import java.awt.*; 2import java.awt.event.*; 3import javax.swing.*; 4import javax.swing.event.*; 5 6public class MyFrame extends JFrame implements ActionListener{ 7 private MyPanel mp; 8 private JButton b1,b2,b3,b4; 9 private JRadioButton rb1,rb2; 10 11 public MyFrame(){ 12 JPanel panel1 = new JPanel(); 13 FlowLayout flow1 = new FlowLayout(); 14 this.mp = new MyPanel(); 15 this.b1 = new JButton("黒"); 16 this.b2 = new JButton("白"); 17 this.b3 = new JButton("赤"); 18 this.b4 = new JButton("青"); 19 this.rb1 = new JRadioButton("pen",true); 20 this.rb2 = new JRadioButton("stamp"); 21 ButtonGroup group = new ButtonGroup(); 22 group.add(this.rb1); 23 group.add(this.rb2); 24 25 panel1.setLayout(flow1); 26 panel1.add(this.rb1); 27 panel1.add(this.rb2); 28 panel1.add(this.b1); 29 panel1.add(this.b2); 30 panel1.add(this.b3); 31 panel1.add(this.b4); 32 panel1.add(this.mp); 33 getContentPane().add(panel1); 34 this.b1.addActionListener(this); 35 this.b2.addActionListener(this); 36 this.b3.addActionListener(this); 37 this.b4.addActionListener(this); 38 this.rb1.addActionListener(this); 39 this.rb2.addActionListener(this); 40 } 41 public void actionPerformed(ActionEvent e){ 42 if(e.getSource() == this.b1){ 43 this.mp.setColor(1); 44 } 45 if(e.getSource() == this.b2){ 46 this.mp.setColor(2); 47 } 48 if(e.getSource() == this.b3){ 49 this.mp.setColor(3); 50 } 51 if(e.getSource() == this.b4){ 52 this.mp.setColor(4); 53 } 54 55 if(e.getSource() == this.rb1){ 56 this.mp.setDrawFlag(true); 57 } 58 if(e.getSource() == this.rb2){ 59 this.mp.setDrawFlag(false); 60 } 61 } 62 63 public static void main(String[] args){ 64 MyFrame w = new MyFrame(); 65 w.setTitle("マウス操作でラインを引く"); 66 w.setSize(650,500); 67 w.setLocation(100,100); 68 w.setVisible(true); 69 w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 70 } 71} 72 73
回答1件
あなたの回答
tips
プレビュー