またまたすいません、Javaについて質問です
閲覧ありがとうございます。
現在Javaで簡単なお絵描きソフトを作成しているのですが、ResetButtonを押すと
画面をクリアしたいのですが、ResetButtonを押すと画面はクリアしますが、何故か
左上にResetButtonが描画されてしまいます・・・何故でしょうか?
ソースは以下の通りです。(また文字数制限に引っかかったので、一部省略してかいてあります。)
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/*+++ メインクラス +++*/
public class java_test_04 extends JFrame
implements ActionListener {
int x1, y1; //描画始点
int x2, y2; //描画次点
MyPanel mp = new MyPanel(); //マイパネルを作成
JButton resetButton = new JButton("Reset"); //リセットボタンを作成
Dimension size;
public static void main(String[] args) {
new java_test_04();
}
public java_test_04() {
setLayout(null);
setTitle("お絵かき"); //フレームタイトルを設定
setSize(400, 400); //フレームサイズを設定
/*+++ リセットボタンの設定 +++*/
resetButton.setBounds(0, 300, 70, 25); //リセットボタンの表示座標・サイズを設定
resetButton.addActionListener(this); //リセットボタンにアクションイベントを追加
getContentPane().add(resetButton); //リセットボタンを追加
/*+++ マイパネルの設定 +++*/
size = Toolkit.
getDefaultToolkit().
getScreenSize(); //フレームのサイズを取得
mp.setBackground(Color.red); //マイパネルの背景色を青に
mp.setBounds(0, 0, size.width, 250); //マイパネルの表示座標・サイズを設定
getContentPane().add(mp); //マイパネルを追加
setVisible(true); //フレームを表示
setDefaultCloseOperation(EXIT_ON_CLOSE); //クローズ処理
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (resetButton == arg0.getSource()) { //リセットボタンが押されたら
mp.repaint(); //グラフィックをリセット
try {
Thread.sleep(100);
} catch(Exception ex) {
System.out.println("[ERR!]" + ex);
}
}
}
/*+++ マイパネルクラス +++*/
class MyPanel extends JPanel
implements MouseListener,MouseMotionListener{
private static final long serialVersionUID = 1L;
MyPanel() {
addMouseMotionListener(this); //マウスモーションイベントを追加
addMouseListener(this); //マウスイベントを追加
}
/*+++ マウスを押したとき +++*/
public void mousePressed(MouseEvent e) {
e.consume();
x1 = x2 = e.getX();
y1 = y2 = e.getY();
paintComponent(getGraphics());
}
/*+++ マウスをドラッグしているとき +++*/
public void mouseDragged(MouseEvent e) {
e.consume();
x2 = e.getX();
y2 = e.getY();
paintComponent(getGraphics()); //描画
x1 = e.getX(); //これが新たな
y1 = e.getY(); //始点となる
}
/*+++ マウスが動いているとき +++*/
public void mouseMoved(MouseEvent e) {
}
/*+++ マウスボタンが離されたとき +++*/
public void mouseReleased(MouseEvent e) {
}
/*+++ マウスがフレーム内に入ったとき +++*/
public void mouseEntered(MouseEvent e) {
}
/*+++ マウスがフレーム外に出たとき +++*/
public void mouseExited(MouseEvent e) {
}
/*+++ マウスがクリックされたとき +++*/
public void mouseClicked(MouseEvent e) {
}
/*+++ ペイントメソッド +++*/
public void paintComponent(Graphics g) {
g.drawLine(x1, y1, x2, y2);
}
}
}
お礼
早速のお答えありがとうございます。 私の説明不足でしたが、swingを使用せずにはできませんか?都合でswing以外で組まなければならないのです。 説明不足ですみません。