JPopupMenu Items aktualisieren sich nicht

Status
Nicht offen für weitere Antworten.
X

xtreme

Gast
Moin,

ich bin gerade dabei mir ein Popup Menü zu basteln. Das Menü hat mehrere Item, die nicht alle enabled (zu setzen mit setEnable(boolean)) sind. Während meiner Laufzeit will ich bei bestimmten Ereignissen das Menü aktivieren. Doch leider bleibt es auch nach dem Setzen der genannten Eigenschaft ausgeblendet.

Ein repaint() hatte leider keine Auswirkung. Weiß jemand warum das so ist und wie ich das ändern kann?

Danke
 
X

xtreme

Gast
OK ist ein wenig länger. Ich habe mal alles überflüssige rausgehauen. In den jetzigen Methoden steht überall der Aufruf mit .setEnable(boolean) drin. Man achte also auf die beiden Menüeinträge _clearSurface und _deleteGeometry. Die Methode checkPopupMenu(MouseEvent event) ruft das ContextMenü auf.

Leider habe ich auch festgestellt, dass nicht jedesmal, wenn ich die rechte Maustaste klicke das Menü überhaupt aufgeht. Habe ab und zu mal einen Aussetzer drin... warum auch immer?!

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package geometrypainter;

import java.io.*;
import java.util.List;
import java.util.Vector;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;


public class DrawingSurface extends JInternalFrame implements ActionListener, ComponentListener, InternalFrameListener, MouseListener, MouseMotionListener{
  
    //Context Menü Items
    private JPopupMenu _contextPopup = new JPopupMenu();
    private JMenuItem _clearSurface = new JMenuItem("Clear Surface");
    private JMenuItem _deleteGeometry = new JMenuItem("Delete Geometry");
    
    
    //Constructor-------------------------------------------------------------------------------------------

    public DrawingSurface(Container container)
    {
        _container = container;
        _toolBar = _container.getToolbar();
        _propertyGrid = _container.getPropertyGrid();
        _layerManager = _container.getLayerManager();
        _rubberband = _container.getRubberband();
        _selectionManager = new SelectionManager(this, _geometryObjects, _layerManager, _propertyGrid);
        
        //Zeichenoberfläche
        getContentPane().add(componentPainter);
        getContentPane().addComponentListener(this);
        getContentPane().addMouseMotionListener(this);
        getContentPane().addMouseListener(this);
        addInternalFrameListener(this);
    }

    
    private void checkPopupMenu(MouseEvent event)
    {
        if(event.isMetaDown())
        {           
            //Clear Surface
            _clearSurface.addActionListener(this);
            _contextPopup.add(_clearSurface);
            
            _deleteGeometry.addActionListener(this);
            _deleteGeometry.setEnabled(false);
            _contextPopup.add(_deleteGeometry);
            
            _contextPopup.show(event.getComponent(), event.getX(), event.getY());
        }
    }
  
    public void redraw()
    {
        componentPainter.repaint(_canvas); 
    }

    
    //Mouse Event-------------------------------------------------------------------------------------------  

    public void mousePressed(MouseEvent e) {
        //Bei linkem Mausklick wird das Fenster aktiviert und...
        if (_canvas.contains(e.getPoint()) && !e.isMetaDown())
        {
            //wird geprüft, ob ein neues Element angelegt wird
            if(_toolBar.getTempGeometryObject() != null)
            {
                if (!_justActivated)
                {
                    //Löschen der Selektion
                    _selectionManager.UnselectGeometry();
                    //Loggen des Löschens-ContextMenü
                    _deleteGeometry.setEnabled(false);

                    //Rubberband wird erst nach dem zweiter Klick ausgeführt
                    _rubberbandIsActive = true;
                    _rubberband.setBandStartPoint(e);
                }
                else
                {
                    _justActivated = false;
                }
            }
            else
            {
                //sonst wird geprüft, ob ein Objekt selektiert oder deselektiert werden muss
                _deleteGeometry.setEnabled(false);
                _selectionManager.SelectionHandler(e);

                if(_selectionManager.getSelectedGeometry() != null)
                {
                    //Freigabe des ContextMenüButtons zum Löschen einzelner Geometrien.
                    _deleteGeometry.setEnabled(true);

                    //Objekt bereit zum Bewegen
                    _selectionIsMoving = true;

                    //Speichern der letzten Mausposition
                    _lastMouseLocation = e.getPoint();
                }
            }
        }
    }
    
    public void mouseDragged(MouseEvent e) {
        if(!e.isMetaDown())
            {
                //Wird geprüft, ob das Rubberband aktiv ist
                if(_rubberbandIsActive)
                {
                    _rubberband.setBandMovingPoint(e);
                    this.redraw();
                }
                //Wird geprüft, ob ein Objekt bewegt wird
                else if (_selectionIsMoving)
                {
                    // Wenn gerade ein Objekt verschoben werden soll, wird die Differenz zur letzten
                    // Mausposition ausgerechnet und das Objekt um diese verschoben.
                    _selectionManager.getSelectedGeometry().Move(e.getPoint().x - _lastMouseLocation.x, e.getPoint().y - _lastMouseLocation.y);

                    //Speichern der letzten Mausposition
                    _lastMouseLocation = e.getPoint();

                    //Flächen überschreiben
                    this.redraw();
                }
            }
    }

    public void mouseReleased(MouseEvent e) {
        if (!e.isMetaDown())
            {
                //Wird geprüft ob das Rubberband aktiv ist
                if (_rubberbandIsActive)
                {
                    _rubberband.setBandEndPoint(e);
                    _rubberbandIsActive = false;

                    //Erstellen einer neuen Geometry
                    CreateGeometry(_rubberband.getFirstPoint(), _rubberband.getEndPoint());

                    this.redraw();
                }
                //Wird geprüft, ob ein Objekt bewegt wird
                else if (_selectionIsMoving)
                {
                    //Ist ein Objekt selektiert, wird es deselektiert, 
                    //damit bei der Mausbewegung, das Objekt nicht verschoben wird
                    _selectionIsMoving = false;
                }
            }
            else if(e.isMetaDown())
            {
                //Bei rechtem MausButton wird geprüft, ob die Oberfläche aktiv ist
                //nur dann erscheint das ContextMenü
                if (_container.getActiveMainForm() == this)
                {
                    //clearSurface.Enabled = true;
                    if (_selectionManager.getSelectedGeometry() != null)
                    {
                        _deleteGeometry.setEnabled(true);
                    }
                }
                else
                {
                    _clearSurface.setEnabled(false);
                    _deleteGeometry.setEnabled(false);
                }
            }
    }
    
    public void mouseClicked(MouseEvent e) {
        checkPopupMenu(e);
    }
    
    public void actionPerformed(ActionEvent e) {
             System.out.println("Hier kommen dann nachher die ContextMenü Events rein!");
    }


}
 

Zed

Bekanntes Mitglied
Ich Tip mal drauf das du das Item enabeln tust und irgenwie danach gleich wieder disabeln tust.
Mein Tip
Es ist die Methode checkPopupMenu.

Event Reihenfolge
taste drücken
taste loslassen
taste click
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wie adde ich ein JPopUpMenu AWT, Swing, JavaFX & SWT 3
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
S Swing JPopupMenu visible AWT, Swing, JavaFX & SWT 4
S JPopupMenu schließen in SystemTray AWT, Swing, JavaFX & SWT 2
xehpuk Swing Listener für JPopupMenu AWT, Swing, JavaFX & SWT 3
hdi Workaround: TrayIcon & JPopupMenu AWT, Swing, JavaFX & SWT 3
K Swing Listener bei JPopupMenu AWT, Swing, JavaFX & SWT 9
S JPopupMenu oder JCombobox die JList oeffnet..? AWT, Swing, JavaFX & SWT 7
A Swing in JPopupMenu die JRadioButtonMenuItems durchlaufen AWT, Swing, JavaFX & SWT 3
T JmenuItems in JPopupMenu kontextabhängig deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing JPopupMenu nicht schließen AWT, Swing, JavaFX & SWT 2
pinerski Probleme mit JPopupMenu und JMenuItem AWT, Swing, JavaFX & SWT 7
hdi Swing JPopupMenu: Größe AWT, Swing, JavaFX & SWT 4
B JPopupMenu, getParent Problem... AWT, Swing, JavaFX & SWT 2
Dragonfire width of JPopupMenu StyleBug AWT, Swing, JavaFX & SWT 3
M JPopupMenu - Ein vorhandenes Kontextmenü erweitern AWT, Swing, JavaFX & SWT 6
Iron Monkey JPopupMenu/JMenuItem Index für getSubElements()[] ermitteln AWT, Swing, JavaFX & SWT 8
T JPopupMenu "schließen" AWT, Swing, JavaFX & SWT 7
M jPopupMenu AWT, Swing, JavaFX & SWT 2
M jPopupMenu - Problem bei der Positionierung AWT, Swing, JavaFX & SWT 3
N JPopupMenu - ausgewähltes Element zurückgeben AWT, Swing, JavaFX & SWT 2
P JPopupMenu scrollen AWT, Swing, JavaFX & SWT 2
A JPopupMenu: Nach oben aufpoppen AWT, Swing, JavaFX & SWT 9
S Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 3
T JPopupMenu wird bei Rechtsklick angezeigt! AWT, Swing, JavaFX & SWT 3
Firefork JPopupMenu unter einem Schalter darstellen AWT, Swing, JavaFX & SWT 2
K Netbeans GUI Builder (Matisse) und erstellen von JPopupMenu AWT, Swing, JavaFX & SWT 1
I In JPopupMenu scrollen AWT, Swing, JavaFX & SWT 4
M JPopupMenu per linker Maustaste öffnen AWT, Swing, JavaFX & SWT 9
V Beliebige Komponenten in einem JPopupMenu? AWT, Swing, JavaFX & SWT 3
F Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 3
C JPopUpMenu in einem JTree ist lahm AWT, Swing, JavaFX & SWT 14
V JPopupMenu Problem und Tipp zu mouse/key AWT, Swing, JavaFX & SWT 3
F JPopupMenu und AbstractAction AWT, Swing, JavaFX & SWT 2
N Problem mit JPopupMenu und alwaysOnTop AWT, Swing, JavaFX & SWT 4
G Schließen von JPopupMenu AWT, Swing, JavaFX & SWT 14
G Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 30
R Hässlicher Punkt bei JPopupMenu AWT, Swing, JavaFX & SWT 12
S JPopupMenu - Kontrolliert beenden AWT, Swing, JavaFX & SWT 3
C Problem mit JPopupMenu AWT, Swing, JavaFX & SWT 6
T java.awt.IllegalComponentStateException bei JPopupMenu AWT, Swing, JavaFX & SWT 6
G Problem mit JPopupMenu und Menüauswahl AWT, Swing, JavaFX & SWT 4
R JPopupMenu,JScrollPane + repaint AWT, Swing, JavaFX & SWT 8
D Probleme bei der Positionierung von JPopupMenu AWT, Swing, JavaFX & SWT 2
J "Problem" mit JPopupMenu AWT, Swing, JavaFX & SWT 7
G JPopupMenu in JTable AWT, Swing, JavaFX & SWT 4
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
J JavaFX TabPane / Wie füge ich einzelne items ? AWT, Swing, JavaFX & SWT 1
J CheckComboBox selected Items nicht anzeigen AWT, Swing, JavaFX & SWT 6
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
D Swing JGoodies: SelectionInList / ObservableList hört nicht auf Veränderungen in den Items AWT, Swing, JavaFX & SWT 1
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
M JComboBox Hintergrundfarbe des gewählten Items AWT, Swing, JavaFX & SWT 3
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
S SWT Maximum an Items in Table? AWT, Swing, JavaFX & SWT 2
S AWT List: Items überschreiben? AWT, Swing, JavaFX & SWT 6
M SWT Table mit Columns und Items AWT, Swing, JavaFX & SWT 3
R TreeViewer in SWT: Default Selection eines Items AWT, Swing, JavaFX & SWT 3
P JTree: Items hinzufügen AWT, Swing, JavaFX & SWT 7
S JList Items hinzufügen AWT, Swing, JavaFX & SWT 6
G Tabellen Items Einträge Aktualisieren AWT, Swing, JavaFX & SWT 2
P JComboBox: Items löschen und neue hinzufügen. AWT, Swing, JavaFX & SWT 3
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
M JavaFX Automatisches Aktualisieren der Seite AWT, Swing, JavaFX & SWT 26
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben