Wie kann ich zu einen JFrame ein neues JPanel hinzufügen, wenn der Jframe zuvor schon aufgerufen wurde?

2 Antworten

Wenn du zwischen verschiedenen Panels hin- und herwechseln möchtest, verwende das CardLayout.

Ein dynamisches Hinzufügen eines Panels zu einem Frame kann so aussehen:

import java.awt.*;
import javax.swing.*;

public class Main {
  public Main() {
    var frame = new JFrame("Example");
    frame.setPreferredSize(new Dimension(400, 400));
    frame.setLayout(new FlowLayout());

    var addButton = new JButton("Add");
    addButton.addActionListener(event -> {
      var panel = new JPanel();
      panel.add(new JLabel("some content"));
      frame.add(panel);
      frame.revalidate();
    });
    frame.add(addButton);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> new Main());
  }
}

Beachte, dass dafür auch der Layout Manager passen sollte. Panels dynamisch in ein GridLayout einzufügen, ist beispielsweise nicht so günstig.

Nur das funktioniert nicht, da ich vermutlich alles in meine Frame Klasse schreiben muss

Wenn du neue Fenster anlegen möchtest, verwende weitere JFrame- oder JDialog-Instanzen. Davon können definitiv mehrere existieren. Wenn du bestimmte Fenster zwischenzeitlich nur ausblenden möchtest, verwende setVisible. So wird verhindert, dass bei jedem Öffnen des Fensters Ressourcen neu im Speicher belegt werden müssen.

Ich würde das jframe einfach leeren und neu befüllen, das klingt für mich am einfachsten. Kann aber sein, dass du das schließen musst und wieder öffnen. Aber am besten ist du sendest Mal code.

Ps: nimm für solche Fragen nicht gutefrage.net sondern Stackoverflow, dort bekommst du schneller die Antwort

Luba1535 
Fragesteller
 21.07.2022, 09:38

Habe ich auch schon gemacht, aber jeder dachte, dass ich mich nicht mit dem Actionlistener auskenne haha.

Oke danke

Dann versuche ich es mal so

0
Luba1535 
Fragesteller
 21.07.2022, 09:38
public class MyOwnFrame extends JFrame implements ActionListener {
    private JButton buttonLogOut, buttonSettings, buttonMarket, buttonProfil, buttonAccounts, bankingButton = new JButton();
    protected JPanel panelCenter = new JPanel();

    JPanel panelAccount = new Account();
    JPanel panelSettings = new Settings();
    JPanel panelProfil = new MyProfil();
    JPanel panelMarket = new Market();

    public void initJFrame(){
        setSize(1000, 750);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);

        add(westSide(), BorderLayout.WEST);
        addToMainCenter(panelAccount);

        add(panelCenter);
        setVisible(true);
    }
    public JPanel westSide(){
        Border emptyBorder = BorderFactory.createEmptyBorder();
        JPanel panelSideBar = new JPanel();
        panelSideBar.setLayout(new GridLayout(4,1));
        panelSideBar.setBackground(Color.WHITE);
        panelSideBar.setPreferredSize(new Dimension(200,750));

        Font westSideFont = new Font("Arial",Font.PLAIN,16);

        Box vbox = Box.createVerticalBox();

        JPanel panelSpace = new JPanel();
        panelSpace.setBackground(Color.WHITE);
        vbox.add(panelSpace);

        JPanel panelSpace1 = new JPanel();
        panelSpace1.setBackground(Color.white);
        panelSpace1.setBorder(emptyBorder);
        vbox.add(panelSpace1);

        buttonProfil = new JButton("Mein Profil");
        buttonProfil.addActionListener(this);
        buttonProfil.setBorder(emptyBorder);
        buttonProfil.setFont(westSideFont);
        buttonProfil.setPreferredSize(new Dimension(180,40));
        vbox.add(buttonProfil);

        buttonAccounts = new JButton("Meine Konten");
        buttonAccounts.addActionListener(this);
        buttonAccounts.setBorder(emptyBorder);
        buttonAccounts.setFont(westSideFont);
        buttonAccounts.setPreferredSize(new Dimension(180,40));
        vbox.add(buttonAccounts);

        buttonMarket = new JButton("Marketinformation");
        buttonMarket.addActionListener(this);
        buttonMarket.setBorder(emptyBorder);
        buttonMarket.setFont(westSideFont);
        buttonMarket.setPreferredSize(new Dimension(180,40));
        vbox.add(buttonMarket);

        buttonSettings = new JButton("Einstellungen");
        buttonSettings.addActionListener(this);
        buttonSettings.setBorder(emptyBorder);
        buttonSettings.setFont(westSideFont);
        buttonSettings.setPreferredSize(new Dimension(180,40));
        vbox.add(buttonSettings);

        buttonLogOut = new JButton("Logout");
        buttonLogOut.addActionListener(this);
        buttonLogOut.setBorder(emptyBorder);
        buttonLogOut.setFont(westSideFont);
        buttonLogOut.setPreferredSize(new Dimension(180,40));
        vbox.add(buttonLogOut);

        panelSideBar.add(vbox);

        return panelSideBar;
    }
    public void removePanel(){
        panelCenter.removeAll();
        panelCenter.revalidate();
        panelCenter.repaint();
    }
    public void addToMainCenter(Component component) {
        removePanel();
        panelCenter.add(addSurroundings(component), BorderLayout.CENTER);
    }
    public JPanel addSurroundings(Component c){
        JPanel panelNorth = new JPanel();
        panelNorth.setPreferredSize(new Dimension(800,50));

        JPanel panelSouth = new JPanel();
        panelSouth.setPreferredSize(new Dimension(800,50));

        JPanel panelWest = new JPanel();
        panelWest.setPreferredSize(new Dimension(50,700));

        JPanel panelEast = new JPanel();
        panelEast.setPreferredSize(new Dimension(50,700));

        panelCenter = new JPanel();
        panelCenter.setLayout(new BorderLayout());

        panelCenter.add(panelNorth, BorderLayout.NORTH);
        panelCenter.add(panelSouth, BorderLayout.SOUTH);
        panelCenter.add(panelEast, BorderLayout.EAST);
        panelCenter.add(panelWest, BorderLayout.WEST);
        panelCenter.add(c, BorderLayout.CENTER);

        return panelCenter;

    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == buttonLogOut){
            dispose();
            new LoginFrame();
        }
        if(e.getSource() == buttonMarket){
            addToMainCenter(panelMarket);
        }
        if(e.getSource() == buttonSettings){
            addToMainCenter(panelSettings);
        }
        if(e.getSource() == buttonAccounts){
            addToMainCenter(panelAccount);
        }
        if(e.getSource() == buttonProfil){
            addToMainCenter(panelProfil);
        }
       
    }
0
Luba1535 
Fragesteller
 21.07.2022, 09:39
public class Account extends JPanel implements ActionListener {
    private JPanel panelBanking, panelTrading, panelCrypto;
    private JButton cryptoButton, ibanCryptoButton;
    private JButton bankingButton, ibanBankButton;

    private JButton tradingButton, ibanTradeButton;

    final Border emptyBorder = BorderFactory.createEmptyBorder();

    final Font fontRight = new Font("Arial", Font.PLAIN, 25);
    final Font fontLeft = new Font("Arial", Font.PLAIN, 18);
    public Account() {
        setLayout(new GridLayout(1,1));
        setPreferredSize(new Dimension(700,800));

        Box verBox = Box.createVerticalBox();

        bankingButton = new JButton("Banking");
        bankingButton.setFont(fontLeft);
        bankingButton.setBorder(emptyBorder);
        bankingButton.addActionListener(this);

        UserData userData = new UserData();
        String curUser = userData.getX("currentUser","currentUser"," ");
        String condition = "WHERE username = '" + curUser + "' OR email = '" + curUser + "'";
        ibanBankButton = new JButton(userData.getIbanBank(condition));
        ibanBankButton.setFont(fontLeft);
        ibanBankButton.setBorder(emptyBorder);
        ibanBankButton.addActionListener(this);

        JLabel moneyLabel = new JLabel(userData.getBankMoney(condition) + " $");
        moneyLabel.setFont(fontRight);

        verBox.add(accountPnlCrea(bankingButton,ibanBankButton,moneyLabel));
        verBox.add(new JPanel());

        tradingButton = new JButton("Trading");
        tradingButton.setFont(fontLeft);
        tradingButton.setBorder(emptyBorder);
        tradingButton.addActionListener(this);

        curUser = userData.getX("currentUser","currentUser"," ");
        condition = "WHERE username = '" + curUser + "' OR email = '" + curUser + "'";
        ibanTradeButton = new JButton(userData.getIbanTrade(condition));
        ibanTradeButton.setFont(fontLeft);
        ibanTradeButton.setBorder(emptyBorder);
        ibanTradeButton.addActionListener(this);

        moneyLabel = new JLabel(userData.getTradeMoney(condition) + " $");
        moneyLabel.setFont(fontRight);

        verBox.add(accountPnlCrea(tradingButton,ibanTradeButton,moneyLabel));
        verBox.add(new JPanel());

        curUser = userData.getX("currentUser","currentUser"," ");
        condition = "WHERE username = '" + curUser + "' OR email = '" + curUser + "'";

        cryptoButton = new JButton("Crypto");
        cryptoButton.setFont(fontLeft);
        cryptoButton.setBorder(emptyBorder);
        cryptoButton.addActionListener(this);

        ibanCryptoButton = new JButton(userData.getIbanCryp(condition));
        ibanCryptoButton.setFont(fontLeft);
        ibanCryptoButton.setBorder(emptyBorder);
        ibanCryptoButton.addActionListener(this);

        moneyLabel = new JLabel(userData.getCryptoMoney(condition) + " $");
        moneyLabel.setFont(fontRight);

        verBox.add(accountPnlCrea(cryptoButton,ibanCryptoButton,moneyLabel));
        verBox.add(new JPanel());

        add(verBox);
    }

    private JPanel accountPnlCrea(JButton name, JButton iban, JLabel labelMoney) {
        JPanel panel = new JPanel();
        panel = new JPanel();
        panel.setSize(new Dimension(700,150));
        panel.setBackground(Color.WHITE);
        panel.setLayout(new FlowLayout());

        Box boxBanking = Box.createVerticalBox();
        boxBanking.add(name);

        JPanel verticalPanel = new JPanel();
        verticalPanel.setPreferredSize(new Dimension(20,60));
        verticalPanel.setBackground(Color.WHITE);
        boxBanking.add(verticalPanel);

        boxBanking.add(iban);
        panel.add(boxBanking);

        JPanel spacePanel = new JPanel();
        spacePanel.setPreferredSize(new Dimension(420,150));
        spacePanel.setBackground(Color.white);
        panel.add(spacePanel);

        JPanel moneypanel = new JPanel();
        moneypanel.setBackground(Color.WHITE);
        moneypanel.add(labelMoney);
        panel.add(moneypanel);

        return panel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == bankingButton){

            MyOwnFrame myOwnFrame = new MyOwnFrame();
            myOwnFrame.removePanel();
            System.out.println("BANKINGBUTTON");

        }
        if(e.getSource() == tradingButton){
            MyOwnFrame myOwnFrame = new MyOwnFrame();
            myOwnFrame.addToMainCenter(new TradingOverview());
        }
        if(e.getSource() == cryptoButton){
            MyOwnFrame myOwnFrame = new MyOwnFrame();
            myOwnFrame.addToMainCenter(new CryptoOverview());
        }
    }
0