Как открыть изображение из JMenu в Java?

Я пытаюсь открыть изображение, когда пользователь нажимает определенную кнопку в моем JMenu. Мне нужно настроить m5 и m6 из этого кода:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class Menu extends JMenuBar implements ActionListener {
    Interface map;

    JMenu m1;
    JMenu m2;
    JMenu m3;
    JMenu m4;
    JMenu m5;
    JMenu m6;
    JMenuItem m12;
    JMenuItem m121;
    JMenuItem m122;
    JMenuItem m123;

    JMenuItem m222;
    JMenuItem m331;
    JMenuItem m332;
    JMenuItem m441;
    JMenuItem m442;
    JMenuItem m551;
    JMenuItem m661;

    public Menu(Interface map) {
        super();
        this.map = map;
        m1 = new JMenu("Nouvelle grille");
        m2 = new JMenu("Solutionner");
        m3 = new JMenu("Générer une grille");
        m4 = new JMenu("Fonctions supplémentaires");
        m5 = new JMenu("Edition");
        m6 = new JMenu("Aide");
        m121 = new JMenuItem("Niveau fort");
        m122 = new JMenuItem("Niveau moyen");
        m123 = new JMenuItem("Niveau faible");
        m12 = new JMenuItem("Sélectionner dans une liste");
        m121.addActionListener(this);
        m122.addActionListener(this);
        m123.addActionListener(this);
        m12.addActionListener(this);
        m222 = new JMenuItem("Vider la Grille");
        m222.addActionListener(this);
        m1.add(m222);
        m331 = new JMenuItem("Afficher la solution");
        m331.addActionListener(this);
        m2.add(m331);
        m332 = new JMenuItem("Cacher la solution");
        m332.addActionListener(this);
        m2.add(m332);
        m332.setEnabled(false);
        m441 = new JMenuItem("Copier grille dans le presse-papier");
        m441.addActionListener(this);
        m4.add(m441);
        m442 = new JMenuItem("Imprimer Grille+Solution");
        m442.addActionListener(this);
        m4.add(m442);
        m551 = new JMenuItem("Annuler déplacement");
        m551.addActionListener(this);
        m5.add(m551);
        m661 = new JMenuItem("Règlements");
        m661.addActionListener(this);
        m6.add(m661);
        m3.add(m121);
        m3.add(m122);
        m3.add(m123);
        m3.addSeparator();
        m3.add(m12);
        this.add(m1);
        this.add(m2);
        this.add(m3);
        this.add(m4);
        this.add(m5);
        this.add(m6);
    }

    public void actionPerformed(ActionEvent evt) {

        map.ecouteur.carre = null;
        if (evt.getSource() == m121) {
            // map.cherchernouvellesgrilles();
            map.supanel.selection(3);
        } else if (evt.getSource() == m122) {
            // map.testersinouvellegrille();
            map.supanel.selection(2);
        } else if (evt.getSource() == m123) {
            map.supanel.selection(1);
        } else if (evt.getSource() == m222) {
            map.supanel.vidergrille();
            // map.supanel.cherchernouvellesgrilles();
        } else if (evt.getSource() == m331) {
            if (map.supanel.solutionnergrille()) {
                m331.setEnabled(false);
                m332.setEnabled(true);
            }
        } else if (evt.getSource() == m332) {
            map.supanel.cachersolution();
            m331.setEnabled(true);
            m332.setEnabled(false);
        } else if (evt.getSource() == m661) {
            // Image Should Be Here
            m661.setEnabled(true);
        }

        else if (evt.getSource() == m441) {
            if (map.getSudoku().getTableaufinal() != null) {
                ecriturepressepapier(map.getSudoku().getTableaufinal());
            } else {
                ecriturepressepapier(map.getSudoku().getGrille());
            }
        }

        else if (evt.getSource() == m442) {
            JFrame frame = new JFrame("Aperçu avant Impression");
            frame.setSize(new Dimension(305, 640));
            Fond supanelreponse1 = new Fond(map.map, map);
            Fond supanelreponse2 = new Fond(map.map, map);
            supanelreponse1.impressionapartirdetableau(map.sudoku.grille);
            if (map.supanel.solutionnergrille()) {
                System.out.println("GRILLE");
                map.sudoku.afficher(map.sudoku.grille);
                System.out.println("REPONSE");
                map.sudoku.afficher(map.sudoku.tableaufinal);
                supanelreponse2
                        .impressionapartirdetableau(map.sudoku.tableaufinal);
                // CONTENTPANEL
                JPanel contentPanel = (JPanel) frame.getContentPane();
                contentPanel.setLayout(null);

                supanelreponse1.setBounds(0, 0, 300, 300);
                contentPanel.add(supanelreponse1);

                supanelreponse2.setBounds(0, 301, 300, 300);
                contentPanel.add(supanelreponse2);

                frame.setContentPane(contentPanel);
                frame.setVisible(true);
                MPanelPrinter mp = new MPanelPrinter(contentPanel);
                mp.print();
                map.supanel.cachersolution();
                frame.dispose();
            }
        }
        map.requestFocus();
    }

    public void ecriturepressepapier(int[][] tableau) {
        String temp = "";

        for (int i = 0; i < tableau.length + 2; i++) {
            temp += "#";
        }
        temp += "\n";

        for (int i = 0; i < tableau.length; i++) {
            temp += "#";
            for (int e = 0; e < tableau[i].length; e++) {
                if (tableau[i][e] != 0) {
                    temp += Integer.toString(tableau[i][e]);
                } else {
                    temp += " ";
                }
            }
            temp += "#\n";
        }

        for (int i = 0; i < tableau.length + 2; i++) {
            temp += "#";
        }
        map.getMpp().setClipboardContents(temp);
    }
}

Например, когда пользователь нажимает на m6 JMenu, должно открываться изображение. Я думаю, что я должен вставить код в этом месте:

else if(evt.getSource()==m661){
    // Image Should Be Here
    m661.setEnabled(true);
}

Я не могу понять, как это сделать, и я хотел бы знать, что такое map.supanel? Кажется, что действие вызвано ими, но я не могу понять, откуда они берутся.

Большое спасибо!


person Sebastian    schedule 17.12.2014    source источник
comment
map является экземпляром класса Interface, там будет определен supanel, хотя я подозреваю, что это ссылка на подпанель. Вы должны иметь возможность определить, в каком пакете он находится, из вашей IDE и проверить его API. Что касается отображения изображения при нажатии Règlements, в Интернете есть множество учебных пособий по свингу и awt, и Google переведет для вас почти все из них на французский язык.   -  person adamdc78    schedule 17.12.2014
comment
Спасибо за это! Я довольно долго разбирал код и начинаю понимать (медленно)! Я нашел, где находится подпанель, и теперь мне нужно реализовать код для изображения. Я перепробовал все фрагменты кода, которые нашел в Интернете, но ничего не работает. Какой самый простой код для открытия изображения в java?   -  person Sebastian    schedule 18.12.2014
comment
Я точно знаю, что код должен быть здесь:else if(evt.getSource()==m661){ // Здесь должно быть изображение m661.setEnabled(true); } потому что, когда я пытаюсь, например, напечатать сообщение, оно работает. Однако я не могу получить изображение для отображения!   -  person Sebastian    schedule 18.12.2014
comment
попробуйте этот ответ.   -  person adamdc78    schedule 18.12.2014
comment
Я только что попробовал этот ответ. Теперь программа компилируется, но когда я нажимаю на нужную вкладку меню, ничего не происходит! :(   -  person Sebastian    schedule 18.12.2014
comment
1) Чтобы быстрее получить помощь, опубликуйте MCVE (минимальный полный проверяемый пример) или SSCCE (краткий, автономный, правильный пример). 2) Одним из способов получения изображений для примера является горячая ссылка на изображения, которые можно увидеть в этих вопросах и ответах.   -  person Andrew Thompson    schedule 19.12.2014
comment
вы пытаетесь открыть файл изображения или отобразить изображение в своем окне?   -  person Mrab Ezreb    schedule 15.05.2015