JPopupmenu java

0

Cześć, mam problem z JPopupMenu jak i ze zwykłym JMenu, rysuję sobie figury na JPanelu i po wciśnięciu prawego klawisza myszy wybieram sobie kolor z JPopup'a, on znika, a wraz z nim to co było pod nim, to samo z rozwijanym głównym menu, kasuje wszystko pod sobą, nie moge znaleźć żadnego sensownego rozwiązania a jestem zupełnie początkujący, jest jakaś metoda oddzielająca menu z panelem? :)


        JPopupMenu mypopupmenu;
        JMenuItem edit, black, red, green, blue, yellow, orange, random;
        JMenu chooseColor;

        MyPopupMenu() {
            mypopupmenu = new JPopupMenu();
            edit = new JMenuItem("Edytuj");
            chooseColor = new JMenu("Wybierz kolor");
            black = new JMenuItem("Czarny");
            red = new JMenuItem("Czerwony");
            green = new JMenuItem("Zielony");
            blue = new JMenuItem("Niebieski");
            yellow = new JMenuItem("Żółty");
            orange = new JMenuItem("Pomarańczowy");
            random = new JMenuItem("Losowy");

            chooseColor.add(black);
            chooseColor.add(red);
            chooseColor.add(green);
            chooseColor.add(blue);
            chooseColor.add(yellow);
            chooseColor.add(orange);
            chooseColor.add(random);
            mypopupmenu.add(edit);
            mypopupmenu.add(chooseColor);

            edit.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // setEditable(true);
                }
            });
            black.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.BLACK);
                }
            });
            red.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.RED);
                }
            });
            green.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.GREEN);
                }
            });
            blue.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.BLUE);
                }
            });
            yellow.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.YELLOW);
                }
            });
            orange.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    drawingField.setCurrentColor(Color.ORANGE);
                }
            });
            random.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Random r = new Random();
                    Color randomColor = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
                    drawingField.setCurrentColor(randomColor);
                }
            });
            // obsługa pojawienia się PopupMenu
            drawingField.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getButton() == MouseEvent.BUTTON3) {
                        mypopupmenu.show(frame, e.getX(), e.getY());
                    }
                }
            });
        }
1

To nie jest kompletny kod, nie można go "wziąć i potestować".

Z biernego czytania nie rzucają się w oko tutaj jakieś błędy.

Sądzę że to malowanie nie jest zrobione poprawnie. Oprócz tego, że masz być doraźnie widoczny efekt (a to m mówisz, ze masz), trzeba "mieć w zapasie" jego "kopię", aby móc go odnowić po zdarzeniach GUI, zwykle to będzie bitmap.
Nie pamiętam, czy kiedyś malowałem w Swingu, chyba nie, ale takie są generalne zależności programowania wszelkich okienek.

Puść sobie kwerendę: java swing drawing i trochę poczytaj, zobacz przykłady.

1 użytkowników online, w tym zalogowanych: 0, gości: 1