[英]Moving graphic object with button and mouse listener
需要一點幫助,我正在嘗試為我的學校項目制作一個簡單的游戲,但是我無法移動坦克。
甚至可以僅通過按鈕移動圖形對象?
我知道這段代碼很糟糕,許多事情本來可以更輕松,更短地完成,但是我們必須主要根據我們學到的知識來做...
我已經使用鼠標偵聽器嘗試過它,但是到目前為止我還做不到。 這是我的代碼。
public class Hra extends JPanel{
public int zakladc=1300;
public int zakladm=35;
public int GetZakladc(){
return zakladc;
}
public int GetZakladm(){
return zakladm;
}
Pozadi();
tank_cerveny();
tank_modry();
JTextField uhel_text=new JTextField(3);
JTextField sila_text=new JTextField(3);
JButton prava=new JButton("VPRAVO");
add(prava);
class obsluha_prava implements MouseListener{
public void mouseClicked(MouseEvent e) {
if (natahu==0){
zakladc=zakladc+1;
System.out.println(zakladc);
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
JButton leva=new JButton("VLEVO");
add(leva);
class obsluha_leva implements MouseListener{
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
}
public void Pozadi(){
Graphics g = img.getGraphics();
Color pisek=new Color(242,197,102);
g.setColor(pisek);
g.fillRect(0,665,1368,100);
}
public void tank_cerveny(){
Graphics g = img.getGraphics();
g.setColor(Color.BLACK);
g.fillOval(zakladc,y-13,40,13);
g.fillRect(zakladc-10,y-2*13+6,15,4);
g.setColor(Color.RED);
g.fillRect(zakladc+5,y-2*13+1,30,13);
}
public void tank_modry(){
Graphics g = img.getGraphics();
g.setColor(Color.BLACK);
g.fillOval(zakladm,y-13,40,13);
g.fillRect(zakladm+35,y-2*13+6,15,4);
g.setColor(Color.BLUE);
g.fillRect(zakladm+5,y-2*13+1,30,13);
}
它的工作方式是,您將按下按鈕“ VPRAVO”,一個儲罐將向右移動,或“ VLEVO”而儲罐將向左移動。
是的,這是完全可能的,這是一個簡化的示例。
當您想在組件上繪畫時,可以在其重寫的paintComponent
方法內進行。 在該方法中,您可以訪問用於繪制組件的實際Graphics
對象。
向將在單擊時調用的每個按鈕添加一個ActionListener
,根據按鈕調整方向和坐標,然后調用repaint()
,這將強制組件使用新值重新繪制自身:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Hra extends JPanel {
private int x = 130;
private int y = 100;
private boolean moveRight = false;
public Hra() {
JButton prava = new JButton("VPRAVO");
prava.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
moveRight = true;
x = x - 5;
repaint();
}
});
add(prava);
JButton leva = new JButton("VLEVO");
leva.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
moveRight = false;
x = x + 5;
repaint();
}
});
add(leva);
}
@Override
public void paintComponent(final Graphics g) {
super.paintComponent(g);
if (moveRight) {
tank_cerveny(g);
} else {
tank_modry(g);
}
}
public void tank_cerveny(final Graphics g) {
g.setColor(Color.BLACK);
g.fillOval(x, y - 13, 40, 13);
g.fillRect(x - 10, y - 2 * 13 + 6, 15, 4);
g.setColor(Color.RED);
g.fillRect(x + 5, y - 2 * 13 + 1, 30, 13);
}
public void tank_modry(final Graphics g) {
g.setColor(Color.BLACK);
g.fillOval(x, y - 13, 40, 13);
g.fillRect(x + 35, y - 2 * 13 + 6, 15, 4);
g.setColor(Color.BLUE);
g.fillRect(x + 5, y - 2 * 13 + 1, 30, 13);
}
public static void main(final String[] args) {
Hra hra = new Hra();
JFrame frame = new JFrame();
frame.setContentPane(hra);
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.