在Java中移动对象错误

时间:2015-03-06 19:30:48

标签: java swing

运行我的代码时收到以下错误。当在文本框中输入名称时,我试图在面板上的随机位置移动对象,当单击makePetButton时,将在textArea中显示名称。

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    The method setLocation(int, int) is undefined for the type BufferedImage
    The method setLocation(int, int) is undefined for the type BufferedImage

以下是我的代码:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Cyberpet extends JFrame 
    implements ActionListener {

//    GUI code omitted here...

    //JPanel bluePanel = new JPanel();
    private JButton makePetButton;
    private JButton hungryButton;
    private JButton resetButton;
    private JTextField enterField;
    private JLabel petName;
    private JTextArea responseArea;
    private JPanel panel, buttonGUI;
    int x =10;
    int y =10;
    int m =20;
    int k =20;
    int xMax = 700;
    int yMax = 500;
    BufferedImage frogImage = null;
    BufferedImage flyImage = null;
    Graphics g, frogG, flyG;

    public static void main (String[] args) {
        Cyberpet frame = new Cyberpet();
        frame.setSize(700, 570);
        frame.setResizable(false); //disable resizing
        frame.getContentPane().setBackground(Color.blue);
        frame.createGUI();
        frame.show();       
    }

    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout() );

        panel = new JPanel();
        panel.setPreferredSize(new Dimension(600, 400));
        panel.setBackground(Color.white);
        window.add(panel);

        buttonGUI = new JPanel();
        buttonGUI.setPreferredSize(new Dimension(500, 70));
        buttonGUI.setLocation(200, 100);
        buttonGUI.setBackground(Color.white);
        window.add(buttonGUI);

        petName = new JLabel("Enter Pet Name!");
        buttonGUI.add(petName);

        enterField = new JTextField("");
        enterField.setPreferredSize(new Dimension(100, 30));
        enterField.setLocation(200, 60);
        enterField.addActionListener(this);
        buttonGUI.add(enterField);

        makePetButton = new JButton("Make Pet");
        buttonGUI.add(makePetButton);

        hungryButton = new JButton("Hungry");
        buttonGUI.add(hungryButton);

        resetButton = new JButton("Reset");
        buttonGUI.add(resetButton);

        responseArea = new JTextArea("Pet Status");
//      responseArea.addFocusListener(this);

        buttonGUI.add(responseArea); 

        makePetButton.addActionListener(this);
        hungryButton.addActionListener(this);
        resetButton.addActionListener(this);

    }

    private void getImages() {
        try {


             frogImage = ImageIO.read(new File ("C:\\OOP\\CyberPet\\src\\img\\frog.gif"));
             flyImage = ImageIO.read(new File ("C:\\OOP\\CyberPet\\src\\img\\fly.gif"));

             g = panel.getGraphics();

             g.drawImage(frogImage, 500, 25, 40, 40, null); //set position and size of the image
             g.drawImage(flyImage, 40, 40, 10, 10, null); //set position and size of the image

        } catch (IOException e) {

        }
    }

    //   ***** nb line of 4 spaces after insert

    public void actionPerformed(ActionEvent event) {
        getImages();
        if (event.getSource() == makePetButton){  
            Random rnd = new Random();
             int xMax = panel.getWidth()-frogImage.getWidth();
             int yMax = panel.getHeight()-frogImage.getHeight();
             x = rnd.nextInt(xMax+20);
             y = rnd.nextInt(yMax+20);
             m = rnd.nextInt(yMax+10);
             k = rnd.nextInt(xMax+10);
             frogImage.setLocation(x,y);
             flyImage.setLocation(m,k);
         responseArea.setText(enterField.getText());

        }



    }

    public void draw()
    {


    }


}

2 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

frogImage.setLocation(x,y);
flyImage.setLocation(m,k);

由于frogImageflyImage的类型为BufferedImage,但未提供名为setLocation(int, int)的方法,因此您无法调用此方法。

您需要使用容器的布局管理器来定位图像。图像不能直接给出坐标。

答案 1 :(得分:-1)

正如错误所述:BufferedImage没有setLocation()方法。