質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1503閲覧

javaのKeyイベントが機能しない

takeuma1227

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/26 02:06

編集2022/01/12 10:55

javaでペイントツールを作成しているのですがKeyイベントを追加した結果、実行は出来るのですが、指定したキーを入力しても反応しません。何が原因でしょうか?

java

1import java.util.*; 2import java.awt.*; 3import java.io.*; 4import java.awt.event.*; 5@SuppressWarnings("unchecked") 6 7class Paint4 extends Frame implements MouseListener,MouseMotionListener,ActionListener,KeyListener{ 8 int x,y,R=0,G=0,B=0,BR=255,BG=255,BB=255,k=1; 9 Vector<Figure> objList; 10 CheckboxGroup cbg,cbc; 11 Checkbox c1,c2,c3,c4,c5,d1,d2,d3; 12 Button end,save,load; 13 int mode=0; 14 Figure obj; 15 public static void main(String args[]){ 16 Paint4 f= new Paint4(); 17 f.setSize(640,480); 18 f.setBackground(new Color(f.BR,f.BG,f.BB)); 19 f.setTitle("Paint Sample"); 20 f.addWindowListener(new WindowAdapter(){ 21 @Override public void windowClosing(WindowEvent e){ 22 System.exit(0); 23 }}); 24 f.setVisible(true); 25 if(args.length==1)f.load(args[0]); 26 } 27 Paint4(){ 28 objList = new Vector<Figure>(); 29 cbg=new CheckboxGroup(); 30 cbc=new CheckboxGroup(); 31 c1=new Checkbox("丸",cbg,true); 32 c2=new Checkbox("円",cbg,false); 33 c3=new Checkbox("四角",cbg,false); 34 c4=new Checkbox("線",cbg,false); 35 c5=new Checkbox("楕円",cbg,false); 36 d1=new Checkbox("R",cbc,false); 37 d2=new Checkbox("G",cbc,false); 38 d3=new Checkbox("B",cbc,false); 39 end=new Button("終了"); 40 save=new Button("保存"); 41 load=new Button("読み込み"); 42 c1.setBounds(560,30,60,30); 43 c2.setBounds(560,60,60,30); 44 c3.setBounds(560,90,60,30); 45 c4.setBounds(560,120,60,30); 46 c5.setBounds(560,150,60,30); 47 d1.setBounds(560,180,60,30); 48 d2.setBounds(560,210,60,30); 49 d3.setBounds(560,240,60,30); 50 end.setBounds(560,300,60,30); 51 save.setBounds(560,330,60,30); 52 load.setBounds(560,360,60,30); 53 setLayout(null); 54 add(c1); 55 add(c2); 56 add(c3); 57 add(c4); 58 add(c5); 59 add(d1); 60 add(d2); 61 add(d3); 62 add(end); 63 add(save); 64 add(load); 65 addMouseListener(this); 66 addMouseMotionListener(this); 67 addKeyListener(this); 68 //終了ボタン処理の登録 69 end.addActionListener(this); 70 save.addActionListener(this); 71 load.addActionListener(this); 72 } 73//以下Keyイベント 74/////////////////////////////////////////////////////////////////////////////////////// 75 public void keyPressed(KeyEvent e){ 76 int keycode = e.getKeyCode(); 77 if(keycode== KeyEvent.VK_UP){ 78 if((BR<250&&BG<250)&&BB<250){ 79 BR=BR+5; 80 BG=BG+5; 81 BB=BB+5; 82 } 83 setBackground(new Color(BR,BG,BB)); 84 } 85 if(keycode== KeyEvent.VK_DOWN){ 86 if((BR>5&&BG>5)&&(BG>5&&BB>5)){ 87 BR=BR-5; 88 BG=BG-5; 89 BB=BB-5; 90 } 91 setBackground(new Color(BR,BG,BB)); 92 } 93 if(keycode==KeyEvent.VK_RIGHT||keycode==KeyEvent.VK_LEFT){ 94 while(k==1){ 95 BR=(int)(Math.random()*256); 96 BG=(int)(Math.random()*256); 97 BB=(int)(Math.random()*256); 98 if((BR!=R||BG!=G)||BB!=B){ 99 k=0; 100 } 101 } 102 k=1; 103 setBackground(new Color(BR,BG,BB)); 104 } 105 if(keycode== KeyEvent.VK_ENTER){ 106 System.out.println("test");//プリントデバッグ 107 setBackground(new Color(255,255,255)); 108 objList.clear(); 109 } 110 } 111 public void keyReleased(KeyEvent e){} 112 public void keyTyped(KeyEvent e){} 113/////////////////////////////////////////////////////////////////////////////////////// 114 public void save(String fname){ 115 try{ 116 FileOutputStream fos=new FileOutputStream(fname); 117 ObjectOutputStream oos=new ObjectOutputStream(fos); 118 oos.writeObject(objList); 119 oos.close(); 120 fos.close(); 121 }catch(IOException e){ 122 } 123 } 124 public void load(String fname){ 125 try{ 126 FileInputStream fis=new FileInputStream(fname); 127 ObjectInputStream ois=new ObjectInputStream(fis); 128 objList=(Vector<Figure>)ois.readObject(); 129 ois.close(); 130 fis.close(); 131 }catch(IOException e){ 132 }catch(ClassNotFoundException e){ 133 } 134 repaint(); 135 } 136 @Override public void paint(Graphics g){ 137 Figure f; 138 for(int i = 0; i < objList.size(); i++){ 139 f = (Figure)objList.elementAt(i); 140 f.paint(g); 141 } 142 if(mode>=1) obj.paint(g); 143 } 144 @Override public void actionPerformed(ActionEvent e){ 145 if (end==e.getSource()){ 146 System.exit(0); 147 }else if (save==e.getSource()){ 148 save("paint.dat"); 149 }else if (load==e.getSource()){ 150 load("paint.dat"); 151 } 152 } 153 public void mousePressed(MouseEvent e){ 154 Paint4 f= new Paint4(); 155 int i=0; 156 Checkbox c,d; 157 x=e.getX(); 158 y=e.getY(); 159 c=cbg.getSelectedCheckbox(); 160 d=cbc.getSelectedCheckbox(); 161 obj=null; 162 if(c==c1){ 163 mode=1; 164 obj=new Ring(); 165 i=1; 166 }else if(c==c2){ 167 mode=2; 168 obj=new Circle(); 169 }else if(c==c3){ 170 mode=2; 171 obj=new Box(); 172 }else if(c==c4){ 173 mode=2; 174 obj=new Line(); 175 } 176 else if(c==c5){ 177 mode=2; 178 obj=new Oval(); 179 } 180 if(d==d1){ 181 R=255; 182 G=0; 183 B=0; 184 }else if(d==d2){ 185 R=0; 186 G=255; 187 B=0; 188 }else if(d==d3){ 189 R=0; 190 G=0; 191 B=255; 192 } 193 if(obj!=null){ 194 obj.moveto(x,y); 195 obj.setColor(R,G,B);//1clear 196 repaint(); 197 } 198 } 199 public void mouseReleased(MouseEvent e){ 200 x=e.getX(); 201 y=e.getY(); 202 if(mode==1) obj.moveto(x,y); 203 else if(mode==2) obj.setWH(x - obj.x,y - obj.y); 204 if(mode>=1){ 205 objList.add(0,obj); 206 obj=null; 207 } 208 mode=0; 209 repaint(); 210 } 211 @Override public void mouseClicked(MouseEvent e){} 212 @Override public void mouseEntered(MouseEvent e){} 213 @Override public void mouseExited(MouseEvent e){} 214 @Override public void mouseDragged(MouseEvent e){ 215 x=e.getX(); 216 y=e.getY(); 217 if(mode==1){ 218 obj.moveto(x,y); 219 }else if(mode==2){ 220 obj.setWH(x - obj.x,y - obj.y); 221 } 222 repaint(); 223 } 224 @Override public void mouseMoved(MouseEvent e){} 225} 226class Coord implements Serializable{ 227 int x,y; 228 int R=0,G=0,B=0; 229 Coord(){ 230 x=y=0; 231 } 232 public void move(int dx,int dy){ 233 x +=dx; 234 y +=dy; 235 } 236 public void moveto(int x,int y){ 237 this.x=x; 238 this.y=y; 239 } 240} 241class Figure extends Coord implements Serializable{ 242 int color; 243 int w,h; 244 Figure(){ 245 color = 0; 246 w=h=0; 247 } 248 public void paint(Graphics g){} 249 public void setWH(int w,int h){ 250 this.w=w; 251 this.h=h; 252 } 253 public void setColor(int R,int G,int B){ 254 this.R=R;//1clear 255 this.G=G; 256 this.B=B; 257 } 258} 259 260 261class Ring extends Figure implements Serializable{ 262 int size; 263 Ring(){ 264 size=10; 265 } 266 @Override public void paint(Graphics g){ 267 g.setColor(new Color(R,G,B));//1clear 268 g.drawOval(x - size/2,y - size/2,size,size); 269 } 270} 271class Circle extends Figure implements Serializable{ 272 Circle(){} 273 @Override public void paint(Graphics g){ 274 g.setColor(new Color(R,G,B));//1clear 275 int r=(int)Math.sqrt((double)(w*w+h*h)); 276 g.drawOval(x - r,y - r,r * 2,r * 2); 277 } 278} 279class Box extends Figure implements Serializable{ 280 Box(){} 281 @Override public void paint(Graphics g){//2clear 282 g.setColor(new Color(R,G,B));//1clear 283 if(w<0&&h<0){ 284 g.drawRect(x+w,y+h,Math.abs(w),Math.abs(h)); 285 }else if(w<0&&h>0){ 286 g.drawRect(x+w,y,Math.abs(w),h); 287 }else if(w>0&&h<0){ 288 g.drawRect(x,y+h,w,Math.abs(h)); 289 }else{ 290 g.drawRect(x,y,w,h); 291 } 292 } 293} 294class Oval extends Figure implements Serializable{//3clear 295 Oval(){} 296 @Override public void paint(Graphics g){ 297 g.setColor(new Color(R,G,B));//1clear 298 if(w<0&&h<0){ 299 g.drawOval(x+w,y+h,Math.abs(w),Math.abs(h)); 300 }else if(w<0&&h>0){ 301 g.drawOval(x+w,y,Math.abs(w),h); 302 }else if(w>0&&h<0){ 303 g.drawOval(x,y+h,w,Math.abs(h)); 304 }else{ 305 g.drawOval(x,y,w,h); 306 } 307 } 308} 309class Line extends Figure implements Serializable{ 310 311 Line(){} 312 @Override public void paint(Graphics g){ 313 g.setColor(new Color(R,G,B));//1clear 314 g.drawLine(x,y,x+w,y+h); 315 } 316}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/07/26 02:08

コードを選択した状態で</>を押してコードをマークアップして下さい。ただ長いので、クラスごととかに分割してマークアップしたほうがいいかも
asahina_dev

2016/07/26 03:17

長い、今回の処理に関係のないソースが多いな・・ メソッドは実行されるが配色の変更がされないということかな?
guest

回答1

0

paintメソッドの末尾に requestFocusInWindow(); を追加すると反応します。

java

1@Override 2public void paint(Graphics g) { 3 Figure f; 4 for (int i = 0; i < objList.size(); i++) { 5 f = (Figure) objList.elementAt(i); 6 f.paint(g); 7 } 8 if (mode >= 1) 9 obj.paint(g); 10 11 // フォーカスをあわせる 12 requestFocusInWindow(); 13}

投稿2016/07/26 06:00

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問