Swing Panel nur bei Maus sichtbar

Diskutiere Panel nur bei Maus sichtbar im AWT, Swing, JavaFX & SWT Bereich.
R

realodds

Hi, wie oben steht, habe ich ein problem:
Viele hatten bestimmt das Problem, aber ich kann irgendwie nicht konkret etwas umsetzen :(.
Java:
        // init JFrame
        setLayout(null);
        setSize(width, height);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("A Star");
        setFocusable(true);
        setUndecorated(false);
        setResizable(false);
        requestFocus();

        final Handler handler = new Handler(this, this.main, nodes);
        addMouseListener(handler);
        addMouseMotionListener(handler);
        addMouseWheelListener(handler);

        // create, add and init Draw
        drw = new Draw();
        drw.setBounds(0, 0, getWidth(), getHeight());
        add(drw);

        // addd buttons and other stuff
        JPanel panel = setup(handler);
        panel.setVisible(true);
        add(panel);

        // set visible
        setLocationRelativeTo(null);
        setVisible(true);
Java:
// Methode setup()
        // create Panel
        JPanel panel = new JPanel();
        panel.setBounds(500, 500, 200, 200);
        panel.setVisible(true);
        panel.setLayout(null);
       
        // checkboxes
        start = new JCheckBox("Start Selection", false);
        end = new JCheckBox("End Selection", false);
        border = new JCheckBox("Border Selection", true);

        // add listeners
        start.addActionListener(handler);
        end.addActionListener(handler);
        border.addActionListener(handler);

        start.setBounds(0, 0, 50, 50);
        end.setBounds(0, 60, 50, 50);
        border.setBounds(0, 120, 50, 50);
       
        // add to panel
        panel.add(start);
        panel.add(end);
        panel.add(border);

        return panel;
Folgendes hab ich auch gefunden, was andere als Tipp gesagt hatten, aber ich mache es:
Java:
@Override
        protected void paintComponent(Graphics g1d) {
            super.paintComponent(g1d);
            Graphics2D g2 = (Graphics2D) g1d;
            .
            .
            .
g1d.dispose();
g2.dispose();
Was soll ich da denn ändern? :(
Danke im Voraus
 
mihe7

mihe7

Viele hatten bestimmt das Problem
Hm... was ist denn das Problem? Dass das Panel nur sichtbar ist, wenn Du mit der Maus drüberfährst? Oder dass es nur dann sichtbar sein soll?

Erstell mal ein minimales kompilier- und ausführbares Beispiel, damit man das nachvollziehen kann.
 
J

JustNobody

Also was direkt auffällt: Du rufst Dispose auf der Graphics Instanz auf, die Du übergeben bekommst.

Also nur um es etwas einleuchtender zu machen:
- Dispose ist ein Wegwerfen
- Wenn Du Dinge, die Dir nur geliehen wurden, wegschmeißt, dann bekommst Du Ärger. (Das ist nicht Deine Graphics-Instanz. Sie wird dir nur für diese Methode als Parameter übergeben!)
- Wenn Du Dinge, die Dir gehören und die Du nicht mehr brauchst, nicht wegschmeisst, dann müllst Du alles zu. -> Also Du erstellst etwas, das (AutoClosable) ist, dann schließe diese Dinge auch sauber. Idealer Weise mit einem try-with-resources.

Das einfach nur zur kleinen Erläuterung, was wichtig ist. Ob das mit dem dispose Aufruf für Dein Problem verantwortlich ist, weiß ich nicht, da ich es auch nicht ganz verstanden habe, was Dein Problem ist. Aber das kann zu Problemen führen wie man z.B. unter https://stackoverflow.com/questions...t-cause-jpanel-to-not-render-any-com/13911783 lesen kann.
 
Thema: 

Panel nur bei Maus sichtbar

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben