1

Тема: Реалізація меню в Java

У моїй програмі створюється меню, а в ньому підменю. В підменю я створюю три елементи: "малювати квадрат", "малювати коло", та "малювати багатокутник". Але чомусь при виборі якогось із пунктів мені нічого не малює. Допоможіть будь-ласка вирішити дану проблему.

package project;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.AbstractAction;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Main
{
    public static void main(String[] args)
    {
        FormFrame frame1 = new FormFrame();
        frame1.setSize(900, 600);
        frame1.setTitle("Laba8");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setVisible(true);
    }
    static class FormFrame extends JFrame
    {
        static class Figura extends JComponent
        {
            int index;
            int[] x = {250, 337, 337, 250, 163, 163};
            int[] y = {350, 300, 200, 150, 200, 300};
            int[] xx = {100, 300, 100, 300};
            int[] yy = {100, 100, 300, 300};
            public Figura(int index)
            {
                this.index = index;
            }
            public void paint(Graphics g)
            {
                g.setColor(Color.BLACK);
                if(index == 1)
                {
                    g.fillOval(150,150,100,100);
                }
                else if(index == 2)
                {
                    g.fillPolygon(x, y, 6);
                }
                else if(index == 3)
                {
                    g.fillPolygon(xx, yy, 4);
                }
            }
        }
        FormFrame()
        {
            setLayout(null);
            JMenuBar menuBar = new JMenuBar(); // створюємо панель-меню
            setJMenuBar(menuBar);

            JMenu menu = new JMenu("Меню"); // створюємо меню
            menuBar.add(menu);

            JMenu drawMenu = new JMenu("Малювати"); // підменю для малювання
            menu.add(drawMenu);

            Action drawCircle = new AbstractAction("Коло")
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                     Figura circle = new Figura(1);
                     circle.repaint();
                }
            };
            Action drawHex = new AbstractAction("Багатокутник")
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    Figura hex = new Figura(2);
                    hex.repaint();
                }
            };
            Action drawSquare = new AbstractAction("Квадрат")
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    Figura Square = new Figura(3);
                    Square.repaint();
                }
            };

            JMenuItem item1 = new JMenuItem(drawCircle);
            drawMenu.add(item1);
            item1.setAccelerator(KeyStroke.getKeyStroke('C', KeyEvent.CTRL_MASK));

            JMenuItem item2 = new JMenuItem(drawHex);
            drawMenu.add(item2);
            item2.setAccelerator(KeyStroke.getKeyStroke('B', KeyEvent.CTRL_MASK));

            JMenuItem item3 = new JMenuItem(drawSquare);
            drawMenu.add(item3);
            item3.setAccelerator(KeyStroke.getKeyStroke('K', KeyEvent.CTRL_MASK));
            drawMenu.addSeparator();

            Action exitAction = new AbstractAction("Вийти")
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                }
            };
            JMenuItem item4 = new JMenuItem(exitAction); // пункт меню для виходу з програми
            menu.add(item4);
        }
    }
}

2

Re: Реалізація меню в Java

Я вже знайшов рішення даної проблеми. Усе працює. Кому цікаво - код внизу.

package project;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.AbstractAction;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Main extends JFrame
{
    int index;
    int[] x = {250, 337, 337, 250, 163, 163};
    int[] y = {350, 300, 200, 150, 200, 300};
    int[] xx = {100, 300, 300, 100};
    int[] yy = {100, 100, 300, 300};
    public Main()
    {
        super("Малюнок");
        setSize(600, 600);
        JFrame myWindow = new JFrame("Laba8");
        myWindow.setSize(300,300);
        myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JMenuBar menuBar = new JMenuBar(); // створюємо панель-меню
        myWindow.setJMenuBar(menuBar);

        JMenu menu = new JMenu("Меню"); // створюємо меню
        menuBar.add(menu);

        JMenu drawMenu = new JMenu("Малювати"); // підменю для малювання
        menu.add(drawMenu);

        Action drawCircle = new AbstractAction("Коло")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                index = 1;
                repaint();
                setVisible(true);
            }
        };
        Action drawHex = new AbstractAction("Багатокутник")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                index = 2;
                repaint();
                setVisible(true);
            }
        };
        Action drawSquare = new AbstractAction("Квадрат")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                index = 3;
                repaint();
                setVisible(true);
            }
        };

        JMenuItem item1 = new JMenuItem(drawCircle);
        drawMenu.add(item1);
        item1.setAccelerator(KeyStroke.getKeyStroke('C', KeyEvent.CTRL_MASK));

        JMenuItem item2 = new JMenuItem(drawHex);
        drawMenu.add(item2);
        item2.setAccelerator(KeyStroke.getKeyStroke('B', KeyEvent.CTRL_MASK));

        JMenuItem item3 = new JMenuItem(drawSquare);
        drawMenu.add(item3);
        item3.setAccelerator(KeyStroke.getKeyStroke('K', KeyEvent.CTRL_MASK));
        drawMenu.addSeparator();

        Action exitAction = new AbstractAction("Вийти")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        };
        JMenuItem item4 = new JMenuItem(exitAction); // пункт меню для виходу з програми
        menu.add(item4);
        myWindow.setVisible(true);
    }
    @Override
    public void paint ( Graphics g )
    {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        if(index == 1)
        {
            g2.fillOval(200,200,200,200);
        }
        else if(index == 2)
        {
            g2.fillPolygon(x, y, 6);
        }
        else if(index == 3)
        {
            g2.fillPolygon(xx, yy, 4);
        }
    }
    public static void main(String args[])
    {
        Main app = new Main();
    }
}
Подякували: 0xDADA11C7, ррр2