Swing jpanel in jframe erzeugen und anzeigen

Status
Nicht offen für weitere Antworten.

hoveman

Mitglied
hallo,
ich möchte gerne in einem jframe ein jpanel erzeugen und auch anezeigen und auf der gleichen weise wieder entfernen. das soll so ähnlich funktionieren, wei bei jmenu oder jpopupmenu. wenn ich auf einen button drücke, soll es erschein. aber es soll halt kein popupmenu sein, weil ich mehr damit machen will. jdialog oder ein weiters jframe kann ich auch nicht benutzen, da das hauptfenster den focus verliert und das sieht nicht so gut aus. hier mein code, der leider nicht funktioniert:

Code:
 ...
    public void updateAndShow(String[] processes, Component c) {
        update(processes);
        state = CANCEL_OPTION;
        Rectangle rec = c.getBounds();
        Point p = c.getLocationOnScreen();
        setLocation(p.x-1, p.y+rec.height+1);
        showPanel(c, c.getX(), c.getY());
    }

    private static JFrame getFrame(Component c) {
        Component comp = c;

        while(!(comp instanceof JFrame) && (comp!=null)) {
            comp = comp.getParent();
        }

        return (JFrame)comp;
    }

    private void showPanel(Component c, int x, int y) {
        JFrame frame = getFrame(c);
        frame.getContentPane().add(this);
        frame.add(this);
        setLocation(x, y);
        setVisible(true);
        validate();
        frame.validate();
        frame.repaint();
    }
...
von außen wird updateAndShow. this ist jpanel. hat jemand vllt ne idee?
mfg
 
Zuletzt bearbeitet:
setLocation bringt nix, wenn das ContentPane des JFrame ein Layout benutzt,
angenommen es ist das Standard-BorderLayout,
dann kann man eh nur hauptsächlich eine Komponente anzeigen, alles weitere mit add hinzugefügte ist nicht zu sehen, insofern recht logisch

- welches Layout fürs ContentPane?
- welche Komponenten sind schon da, sollen die alten entfernt werden, alles nebeneinander oder wie,
- lauffähigen Code + Screenshots/ Skizzen/ Beschreibungen von vorher + gewünschten nachher
 
für dein vorhaben(zumindest) das was du beschrieben hast, find ich deine vorgehensweise viel zu kompliziert...
hier mal ein einfaches bsp.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.util.Random;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class TestPanel extends JFrame{

    private JPanel northPanel;
    private JPanel centerPanel;
    public TestPanel()
    {
        super("TestPanel");
        northPanel = new JPanel();
        AbstractAction abstractAction = new AbstractAction("Switch Color")
        {

            public void actionPerformed(ActionEvent e) {
                Random random = new Random();

                int r = random.nextInt(255);
                int g = random.nextInt(255);
                int b = random.nextInt(255);
                remove(centerPanel);
                centerPanel = new ColorPanel(new Color(r,g,b));
                add(centerPanel, BorderLayout.CENTER);
                validate();
                repaint();
                
            }
            
        };
        northPanel.add(new JButton(abstractAction));
        centerPanel = new JPanel();
        add(centerPanel, BorderLayout.CENTER);
        add(northPanel, BorderLayout.NORTH);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    
    public class ColorPanel extends JPanel
    {
        public ColorPanel(Color c)
        {
            setBackground(c);
        }
    }
    
    public static void main(String[] args) {
        new TestPanel();
    }
}
 
ich bin auf arbeit und kann deswegen leider keine bilder hochladen.
im grunde ich will ich nur, dass sich bei einem klick auf einen button ein jpanel o.ä. öffnet, wo man dann checkboxen, jlist usw ... anzeigen kann.
das hab ich auch schon geschafft, mit jdialog und jframe. nur dann verliert das hauptframe den focus. das möchte ich aber nicht. da hab ich mir gedacht, ich nehme einfach ein jpanel und zeig das im hauptframe an. das panel soll/kann auch ein paar dinge vom hauptframe überdecken, es soll aber nicht das layout vom frame ändern! es soll einfach nur "rüber" gemalt werden wie es zb bei jpopup oder bei jmenu der fall ist. da wird ja auch einfach "rüber" gezeichnet und das hauptfenster verliert nicht den focus.
ich hoffe, das ist verständlich.😱
 
ich bin auf arbeit und kann deswegen leider keine bilder hochladen.
im grunde ich will ich nur, dass sich bei einem klick auf einen button ein jpanel o.ä. öffnet, wo man dann checkboxen, jlist usw ... anzeigen kann.
das hab ich auch schon geschafft, mit jdialog und jframe. nur dann verliert das hauptframe den focus. das möchte ich aber nicht. da hab ich mir gedacht, ich nehme einfach ein jpanel und zeig das im hauptframe an. das panel soll/kann auch ein paar dinge vom hauptframe überdecken, es soll aber nicht das layout vom frame ändern! es soll einfach nur "rüber" gemalt werden wie es zb bei jpopup oder bei jmenu der fall ist. da wird ja auch einfach "rüber" gezeichnet und das hauptfenster verliert nicht den focus.
ich hoffe, das ist verständlich.😱

ganz ehrlich nö...

Was ist genau dein problem??? du nimmst ein JPanel und setzt darauf deine Komponenten... und diese Panel addest du auf dein JFrame...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben