Добавьте иконки на изображение, используя графический интерфейс Java - PullRequest
0 голосов
/ 22 декабря 2018

Мне нужно создать приложение с использованием графического интерфейса Java (Eclipse).

Мне нужно показать изображение и добавить меню, как я делал в коде ниже.Кроме того, когда пользователь использует мышь, чтобы щелкнуть по изображению, мне нужно сохранить местоположение и добавить значок в этом месте.Поэтому, если пользователь нажимает в двух разных местах, мне нужно поместить значок в каждом месте.

Я пытаюсь сделать это, но я не знаю, как добавить значки на изображение.В некоторых других статьях я вижу, что, возможно, мне нужно использовать метод repaint(), но я не понимаю, как этот метод работает.

Если кто-то может мне помочь, что мне нужно добавить в мой код, который я могу поместитьзначки на картинке.

Я положил сюда весь свой код.

public class MainWindowApp extends JFrame {

private JMenuBar menuBar;
private JMenu fileMenu, helpMenu, gameMenu, createGame, addObjects, startMenu;
private JMenuItem openItem, saveItem, conMenu, clearItem, fruitItem, pacmanItem;
private JMenuItem aboutUsItem, conItem, playGameItem, simulationItem, stopDrawObjectsItem;
private Game game;
private int pacman = 0, fruit = 0;
private Board board;

public MainWindowApp() {
    game = new Game();
    initUI();
    initComponents();
    createActions();

}

private void initUI() {
    board=new Board();
    add(board);

    pack();

    setTitle("Bardejov");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
}

public void initComponents() {
    // set menu bar
    menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    menuBar.setVisible(true);

    // set file menu with open, save
    fileMenu = new JMenu("File");
    openItem = new JMenuItem("Open");
    // CTRL_MASK: The control modifier. An indicator that the control key was held
    // down during the event.
    openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
    fileMenu.add(openItem);
    saveItem = new JMenuItem("Save");
    saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
    fileMenu.add(saveItem);
    menuBar.add(fileMenu);

    // set Game menu with create game, clear game
    gameMenu = new JMenu("Game options");
    createGame = new JMenu("Create new game");
    addObjects = new JMenu("Add objects");
    clearItem = new JMenuItem("Clear game");
    pacmanItem = new JMenuItem("Pacman");
    fruitItem = new JMenuItem("Fruit");
    stopDrawObjectsItem = new JMenuItem("Stop add objects");
    addObjects.add(pacmanItem);
    addObjects.add(fruitItem);
    addObjects.add(stopDrawObjectsItem);
    createGame.add(addObjects);
    gameMenu.add(createGame);
    gameMenu.add(clearItem);
    menuBar.add(gameMenu);

    // set start menu
    startMenu = new JMenu("Play game");
    simulationItem = new JMenuItem("Eat simulate");
    playGameItem = new JMenuItem("start game");

    // set help menu
    helpMenu = new JMenu("Help");
    conItem = new JMenuItem("Connection");
    aboutUsItem = new JMenuItem("About us");
    helpMenu.add(conItem);
    helpMenu.add(aboutUsItem);
    menuBar.add(helpMenu);

}

public void createActions() {
    pacmanItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            fruit = 0;
            pacman = 1;

        }

    });
    fruitItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            pacman = 0;
            fruit = 1;
        }
    });
    stopDrawObjectsItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            pacman = 0;
            fruit = 0;
        }
    });
    openItem.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("open file");
            try {
                readFileDialog();
            } catch (FileNotFoundException e1) {
                System.out.println("File not found");
            }
        }
    });
    saveItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("save file");
            writeFileDialog();
        }
    });
}

public void readFileDialog() throws FileNotFoundException {
    // try read from the file

    FileDialog fd = new FileDialog(this, "Open csv file", FileDialog.LOAD);
    fd.setFile("*.csv");
    fd.setDirectory("C:\\");
    fd.setFilenameFilter(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".csv");
        }
    });
    fd.setVisible(true);
    String folder = fd.getDirectory();
    String fileName = fd.getFile();
    try {
        CsvReader csvReader = new CsvReader();
        csvReader.init(folder + fileName, ",");
        game = csvReader.read(1);

    } catch (ParseException e) {
        e.printStackTrace();
    }
}

public void writeFileDialog() {
    // try write to the file
    FileDialog fd = new FileDialog(this, "Save the game", FileDialog.SAVE);
    fd.setFile("*.csv");
    fd.setFilenameFilter(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".csv");
        }
    });
    fd.setVisible(true);
    String folder = fd.getDirectory();
    String fileName = fd.getFile();
    try {
        game.saveGame(folder + fileName);
    } catch (IOException ex) {
        System.out.print("Error writing file  " + ex);
    }
}

int x = -1;
int y = -1;

public void mouseClicked(MouseEvent arg) {
    System.out.println("mouse Clicked");
    System.out.println("(" + arg.getX() + "," + arg.getY() + ")");
    x = arg.getX();
    y = arg.getY();
    int maxId = game.getBiggestId() + 1;
    if (fruit == 1)
        game.add(new Fruit(maxId, Map.pixel2Polar(new Point3D(x, y, 0)), 1));
    else if (pacman == 1)
        game.add(new Pacman(maxId, Map.pixel2Polar(new Point3D(x, y, 0)), 1, 1, null));
    else
        return;
    repaint();
}

public static void main(String[] args) {

    EventQueue.invokeLater(() -> {
        MainWindowApp ex = new MainWindowApp();
        ex.setVisible(true);
    });
}
}
...