フレームを作り背景色を設定してマウスリスナーで座標を取得して四角を描画するプログラムです。
エラーは特に出ずに実行できるのですが、フレームを拡大しても描画範囲が変わらず、一度最小化したら再表示した際にフレーム内が真っ黒になってしまいます。また描画色をどんな色に設定しても白になります。
おそらくpaint()がうまく処理されてないんだと思うのですが、同じプログラムを自分のノートパソコン(Windows10Home)でやると今書いた状態になるのですが学校のパソコン(Windowsだったことだけ覚えています)で実行したときは拡大、最小化ともに問題なく実行できました。
一体何が原因でpaint()がおかしくなるのか助言をお願いします。
Java
1package 練習問題08; 2import javax.swing.JFrame; 3public class kadai08rame { 4 public static void main(String[] args) { 5 kadai08DS frame=new kadai08DS(); 6 frame.setSize(360,400); 7 frame.setTitle("イベント処理"); 8 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9 frame.setVisible(true); 10 } 11} 12--- 13 14package 練習問題08; 15import java.awt.Color; 16import java.awt.Graphics; 17public class kadai08S { 18 private int x1,y1,x2,y2; 19 public kadai08S(int x1,int y1,int x2,int y2){ 20 this.x1=x1; 21 this.y1=y1; 22 this.x2=x2; 23 this.y2=y2; 24 } 25 public void draw(Graphics g){ 26 g.setColor(Color.BLACK); 27 g.drawRect(x1, y1, x2-x1, y2-y1); 28 } 29} 30--- 31 32 package 練習問題08; 33 import java.awt.Color; 34import java.awt.Graphics; 35import java.awt.event.MouseEvent; 36import java.awt.event.MouseListener; 37import java.util.ArrayList; 38 39import javax.swing.JFrame; 40 public class kadai08DS extends JFrame implements MouseListener{ 41 private int x1,y1,x2,y2; 42 ArrayList array; 43 private int i; 44 public kadai08DS(){ 45 x1=0; 46 y1=0; 47 x2=0; 48 y2=0; 49 setBackground(Color.CYAN); 50 array=new ArrayList(); 51 addMouseListener(this); 52 } 53 public void paint(Graphics g){ 54 for(i=0;i<array.size();i++){ 55 kadai08S skk=(kadai08S)array.get(i); 56 skk.draw(g); 57 } 58 } 59 public void mousePressed(MouseEvent e){ 60 x1=e.getX(); 61 y1=e.getY(); 62 } 63 public void mouseReleased(MouseEvent e){ 64 x2=e.getX(); 65 y2=e.getY(); 66 kadai08S skk=new kadai08S(x1,y1,x2,y2); 67 array.add(skk); 68 repaint(); 69 } 70 public void mouseClicked(MouseEvent e){} 71 public void mouseEntered(MouseEvent e){} 72 public void mouseExited(MouseEvent e){} 73 }
回答4件
あなたの回答
tips
プレビュー