не реагируют кнопки JMenuBar

139
17 октября 2019, 06:20

помогите найти ошибку. Программа запускается, но кнопки не реагируют на нажатия

import javax.swing.JFrame;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
public class Game extends JFrame {
//static JFrame frame;
Game()
{
    super("Robots see");
    setVisible(true);
    setSize(1400, 800);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JMenuBar menu = new JMenuBar();
    getContentPane().add(BorderLayout.NORTH, menu);
    JMenu btn_load = new JMenu("Открыть");
    JMenu btn_save = new JMenu("Сохранить");
    JMenu btn_saveAs = new JMenu("Сохранить как");
    JMenu btn_sets = new JMenu("Настройки");
    menu.add(btn_load);
    menu.add(btn_save);
    menu.add(btn_saveAs);
    menu.add(btn_sets);
    btn_load.addActionListener(new LoadClicked(this));
}

public static void main(String[] args) throws IOException {
    Game game = new Game();
}
}
class LoadClicked implements ActionListener
{
static Game game;
static BufferedImage image;
LoadClicked(Game game)
{
    this.game = game;
}
public void actionPerformed(ActionEvent e)
{
    String filename;
    JFileChooser fileChooser = new JFileChooser();
    int result = fileChooser.showOpenDialog(null);
    // Если директория выбрана, покажем ее в сообщении
    try{ if (result == JFileChooser.APPROVE_OPTION )
    {
        filename = fileChooser.getSelectedFile().getAbsolutePath();
        image = ImageIO.read(new File(filename));
    }}
    catch(IOException e1) { }
    JPanel pane = new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, null);
        }
    };
    game.add(pane);
 }
 }
Answer 1

Вот написал тестовый пример. Action - это некое действие к которому с формы можно получить доступ разными способами ( меню, панель инструментов, контекстное меню, горячие клавиши ). Поэтому сначала создаем просто действия, потом их добавляем куда нам надо. Из Вашего примера не совсем понял что в итоге вы хотели получить Menu или Toolbar, поэтому написал пример и для Menu и для Toolbar.

    public static void main(String[]args){
        GameFrame frame = new GameFrame();
        frame.setVisible(true);
    }
    private static class GameFrame extends JFrame{
        public GameFrame() throws HeadlessException {
            init();
        }
        private void init(){
            setTitle("Robots see");
            setSize(1400, 800);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Доступные действия
            Action actionOpen = new ActionOpen();
            Action actionSave = new ActionSave();
            Action actionSaveAs = new ActionSaveAs();
            Action actionSettings = new ActionSettings();
            //Если нужно меню сделать действия доступными
            //через меню
            JMenuBar mainMenuBar = new JMenuBar();
            JMenu menu = new JMenu("MenuName");
            menu.add(actionOpen);
            menu.add(actionSave);
            menu.add(actionSaveAs);
            menu.add(actionSettings);
            mainMenuBar.add(menu);
            //Если нужно сделать действия доступными через
            //панель с кнопками
            JToolBar mainToolBar = new JToolBar();
            mainToolBar.add(actionOpen);
            mainToolBar.add(actionSave);
            mainToolBar.add(actionSaveAs);
            mainToolBar.add(actionSettings);
            //Компоновка элементов
            JPanel topPanel = new JPanel();
            topPanel.setLayout(new BorderLayout());
            topPanel.add(mainMenuBar,BorderLayout.NORTH);
            topPanel.add(mainToolBar,BorderLayout.CENTER);
            getContentPane().add(topPanel,BorderLayout.NORTH);
        }

        /**
         * Открыть
         */
        private class ActionOpen extends AbstractAction{
            public ActionOpen() {
                super("Открыть");
            }
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,"Action open");
            }
        }
        /**
         * Сохранить
         */
        private class ActionSave extends AbstractAction{
            public ActionSave() {
                super("Сохранить");
            }
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,"Action save");
            }
        }
        /**
         * Сохранить как
         */
        private class ActionSaveAs extends AbstractAction{
            public ActionSaveAs() {
                super("Сохранить как ...");
            }
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,"Action save as");
            }
        }

        /**
         * Настройки
         */
        private class ActionSettings extends AbstractAction{
            public ActionSettings() {
                super("Настройки");
            }
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,"Action settings");
            }
        }
    }
READ ALSO
Ошибка при вызове python скрипта из Runtime

Ошибка при вызове python скрипта из Runtime

Необходимо по команде выполнить запуск python скриптаНе использовал jython т

122
Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым числом

Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым числом

Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым...

112
Как присвоить куки jsoup

Как присвоить куки jsoup

Нужно присвоить куки при входе на сайт

112
Как восстановить измененный css-файл на Joomla!

Как восстановить измененный css-файл на Joomla!

Как восстановить нечаянно измененный файл css на Joomla? Бэкапов не делал, кажетсяИмеется ли в системе что-либо наподобие комбинации клавиш "Ctrl+Z"...

114