
java问题,p1.setFocusable(true);p2.setFocusable(ture),setFocusable,这三行求大神帮助!
为什么多了29行,方向键不能移动圆,少了30或31的任意行,圆也不能动了。packagePractice;importjava.awt.*;importjavax.swi...
为什么多了29行,方向键不能移动圆,少了30或31的任意行,圆也不能动了。
package Practice;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Practice16_3 extends JFrame {
private JButton jbtUP;
private JButton jbtDOWN;
private JButton jbtRIGHT;
private JButton jbtLEFT;
Practice16_3(){
MovableCircle p1 = new MovableCircle();
p1.setFocusable(true);
jbtUP = new JButton("UP");
jbtDOWN = new JButton("DOWN");
jbtRIGHT = new JButton("RIGHT");
jbtLEFT = new JButton("LEFT");
jbtUP.addActionListener(p1.new jbtListener());
jbtDOWN.addActionListener(p1.new jbtListener());
jbtLEFT.addActionListener(p1.new jbtListener());
jbtRIGHT.addActionListener(p1.new jbtListener());
Panel p2 = new Panel(new GridLayout(1,4,5,5));
p2.add(jbtUP);
p2.add(jbtDOWN);
p2.add(jbtLEFT);
p2.add(jbtRIGHT);
setLayout(new BorderLayout());
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
// setFocusable(true); 有了这行后上下左右方向键不能移动了;
p2.setFocusable(true); // 少了下面任意一行,上下左右方向键不能移动了。
p1.setFocusable(true); //
}
//Panel
public class MovableCircle extends JPanel{
private int x,y;
public MovableCircle(){
addKeyListener(new circleListener());
}
class circleListener extends KeyAdapter{
public void keyPressed (KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP: y-=20; break;
case KeyEvent.VK_DOWN:y+= 20; break;
case KeyEvent.VK_RIGHT:x+= 20;break;
case KeyEvent.VK_LEFT :x-=20;break;
}
repaint();
}
}
class jbtListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jbtUP)
y-=50;
if(e.getSource()==jbtDOWN)
y+=50;
if(e.getSource()==jbtRIGHT)
x+=50;
if(e.getSource()==jbtLEFT)
x-=50;
repaint();
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x,y,100,100);
}
}
public static void main (String[]args){
Practice16_3 frame = new Practice16_3();
frame.setTitle("CONtrolCircle");
frame.setLocationRelativeTo(null);
frame.setSize(200,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} 展开
package Practice;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Practice16_3 extends JFrame {
private JButton jbtUP;
private JButton jbtDOWN;
private JButton jbtRIGHT;
private JButton jbtLEFT;
Practice16_3(){
MovableCircle p1 = new MovableCircle();
p1.setFocusable(true);
jbtUP = new JButton("UP");
jbtDOWN = new JButton("DOWN");
jbtRIGHT = new JButton("RIGHT");
jbtLEFT = new JButton("LEFT");
jbtUP.addActionListener(p1.new jbtListener());
jbtDOWN.addActionListener(p1.new jbtListener());
jbtLEFT.addActionListener(p1.new jbtListener());
jbtRIGHT.addActionListener(p1.new jbtListener());
Panel p2 = new Panel(new GridLayout(1,4,5,5));
p2.add(jbtUP);
p2.add(jbtDOWN);
p2.add(jbtLEFT);
p2.add(jbtRIGHT);
setLayout(new BorderLayout());
add(p1,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH);
// setFocusable(true); 有了这行后上下左右方向键不能移动了;
p2.setFocusable(true); // 少了下面任意一行,上下左右方向键不能移动了。
p1.setFocusable(true); //
}
//Panel
public class MovableCircle extends JPanel{
private int x,y;
public MovableCircle(){
addKeyListener(new circleListener());
}
class circleListener extends KeyAdapter{
public void keyPressed (KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP: y-=20; break;
case KeyEvent.VK_DOWN:y+= 20; break;
case KeyEvent.VK_RIGHT:x+= 20;break;
case KeyEvent.VK_LEFT :x-=20;break;
}
repaint();
}
}
class jbtListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==jbtUP)
y-=50;
if(e.getSource()==jbtDOWN)
y+=50;
if(e.getSource()==jbtRIGHT)
x+=50;
if(e.getSource()==jbtLEFT)
x-=50;
repaint();
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x,y,100,100);
}
}
public static void main (String[]args){
Practice16_3 frame = new Practice16_3();
frame.setTitle("CONtrolCircle");
frame.setLocationRelativeTo(null);
frame.setSize(200,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询