ブラウザで使用してみたところ画面のスクロールやりサイズをすると描画したものが消えてしまいました。
どのように改良したらよいかアドバイスをお願いします。(明日提出しなくてはならないものなので少し急いでいます。)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class paint extends Applet implements MouseMotionListener, MouseListener, ActionListener{
int gx = 0; //X座標を保持する変数
int gy = 0; //Y座標を保持する変数
int olx1,olx2,oly1,oly2;
int c =0; //出力する色の種類を保持する変数
boolean erase = false;
boolean pen = true;
boolean oval = false;
boolean line = false;
Graphics Grp;
Color colors[] = {Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green,
Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow};
int deltax = 260/colors.length;
public void init(){
Button er = new Button("けしごむ");
Button pen = new Button("ぺん");
Button oval = new Button("円");
Button line = new Button("直線");
Button reset = new Button("リセット");
add(er);
add(pen);
add(oval);
add(line);
add(reset);
Grp = getGraphics();
addMouseMotionListener(this);
addMouseListener(this);
er.addActionListener(this);
pen.addActionListener(this);
oval.addActionListener(this);
reset.addActionListener(this);
line.addActionListener(this);
}
public void paint(Graphics g) {
for(int i = 0; i < colors.length; i++){
g.setColor(colors[i]);
g.fillRect(i * deltax, 0, deltax, deltax);
}
}
public void actionPerformed(ActionEvent e) {
String cmdName=e.getActionCommand();
if("リセット".equals(cmdName)){
repaint();
}
if ("ぺん".equals(cmdName) && !pen) {
this.erase = false;
this.pen = true;
this.oval = false;
this.line = false;
}
else if("けしごむ".equals(cmdName) && !erase) {
this.erase = true;
this.pen = false;
this.oval = false;
this.line = false;
}
else if("円".equals(cmdName) && !oval) {
this.oval = true;
this.pen = false;
this.erase = false;
this.line = false;
}
else if("直線".equals(cmdName) && !line) {
this.line = true;
this.pen = false;
this.erase = false;
this.oval = false;
}
}
public void mouseDragged(MouseEvent e) {
//マウスドラック時に、画面に出力
if(gx>260 || gy>deltax){
if(erase){
Grp.setColor(colors[11]);
Grp.fillRect(gx,gy,deltax,deltax);
}
else if(pen){
Grp.setColor(colors[c]);
Grp.drawLine(gx,gy,e.getX(),e.getY());
}
}
gx = e.getX();
gy = e.getY();
}
public void mouseClicked(MouseEvent e){
for(int i = 0; i < colors.length; i++){
if(gx > i*deltax && gx<(i+1)*deltax && gy>0 && gy<deltax) c=i;
}
gx = e.getX();
gy = e.getY();
}
public void mouseMoved(MouseEvent e) {
//現在のマウス座標保持
gx = e.getX();
gy = e.getY();
}
public void mouseEntered(MouseEvent e) {
gx = e.getX();
gy = e.getY();
}
public void mouseExited(MouseEvent e) {
gx = e.getX();
gy = e.getY();
}
public void mousePressed(MouseEvent e) {
if(oval || line){
olx1=gx;
oly1=gy;
}
gx = e.getX();
gy = e.getY();
}
public void mouseReleased(MouseEvent e) {
Grp.setColor(colors[c]);
if(oval){
olx2=gx-olx1;
oly2=gy-oly1;
int a = olx2*(-1);
int b = oly2*(-1);
if(gx>260 || gy>deltax){
if(olx2>0 && oly2>0){
Grp.drawOval(olx1,oly1,olx2,oly2);
}
else if(olx2<0 && oly2>0){
Grp.drawOval(olx1-a,oly1,a,oly2);
}
else if(olx2>0 && oly2<0){
Grp.drawOval(olx1,oly1-b,olx2,b);
}
else{
Grp.drawOval(olx1-a,oly1-b,a,b);
}
}
}
if(line){
olx2=gx;
oly2=gy;
Grp.setColor(colors[c]);
if(gx>260 || gy>deltax){
if(olx2>0 && oly2>0){
Grp.drawLine(olx1,oly1,olx2,oly2);
}
else if(olx2<0 && oly2>0){
Grp.drawLine(olx1,oly1,olx2,oly2);
}
else if(olx2>0 && oly2<0){
Grp.drawLine(olx1,oly1,olx2,oly2);
}
else{
Grp.drawLine(olx1,oly1,olx2,oly2);
}
}
}
gx = e.getX();
gy = e.getY();
}
}