Как будто многооконное приложение JFrame Java - PullRequest
0 голосов
/ 19 июня 2020

Недавно я начал изучать Java и создавать gui программу с использованием JFrame. Я хотел сделать что-то вроде нажатия кнопки, чтобы все, что сейчас находится в окне, исчезло (JButton и JLabel) и чтобы отображались другие кнопки, чтобы все было в одном окне. Мой код выглядит так:

package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import app.Exit;
import app.Logger;

public class MainMenu extends JFrame implements ActionListener{

    // Create objects
    public static Logger log = new Logger();

    // Buttons declaration
    JButton bExit, bStartBot, bOptions, bAboutLikeplusBot, bChangelog;

    // Label declaration
    JLabel lLogo;

    public MainMenu() throws IOException {

        // Set window size
        log.AddToLog("Set window size", "JFrame", "INFO");
        setSize(800, 500);

        // Disable window resizable
        log.AddToLog("Disable window resizable", "JFrame", "INFO");
        setResizable(false);

        // Set window title
        log.AddToLog("Set window title", "JFrame", "INFO");
        setTitle("LikeplusBot");

        // Set layout
        log.AddToLog("Set layout", "JFrame", "INFO");
        setLayout(null);

        // Add Exit button
        log.AddToLog("Add Exit button", "JFrame/JButton", "INFO");
        bExit = new JButton("Exit");
        bExit.setBounds(610, 365, 160, 70);
        add(bExit);
        bExit.addActionListener(this);

        // Add Start bot button
        log.AddToLog("Add Start bot button", "JFrame/JButton", "INFO");
        bStartBot = new JButton("Start bot");
        bStartBot.setBounds(610, 25, 160, 70);
        add(bStartBot);
        bStartBot.addActionListener(this);

        // Add Options button
        log.AddToLog("Add Options button", "JFrame/JButton", "INFO");
        bOptions = new JButton("Options");
        bOptions.setBounds(610, 110, 160, 70);
        add(bOptions);
        bOptions.addActionListener(this);

        // Add About LikeplusBot button
        log.AddToLog("Add About LikeplusBot button", "JFrame/JButton", "INFO");
        bAboutLikeplusBot = new JButton("About LikeplusBot");
        bAboutLikeplusBot.setBounds(610, 195, 160, 70);
        add(bAboutLikeplusBot);
        bAboutLikeplusBot.addActionListener(this);

        // THIS IS A BUTTON WHICH A PRESS IS TO BE DISPLAYED BY OTHER BUTTONS ---------------------------
        // Add Changelog button
        log.AddToLog("Add Changelog button", "JFrame/JButton", "INFO");
        bChangelog = new JButton("Changelog");
        bChangelog.setBounds(610, 280, 160, 70);
        add(bChangelog);
        bChangelog.addActionListener(this);

        // Add logo photo
        log.AddToLog("Add logo photo", "JFrame/JLabel", "INFO");
        ImageIcon icon = new ImageIcon(MainMenu.class.getResource("/resources/LPB_300x300.png"));
        lLogo = new JLabel();
        lLogo.setBounds(120, 20, 400, 400);
        lLogo.setIcon(icon);
        add(lLogo);

    }

    /*
     * Show window
     */
    public static void main(String[] args) throws IOException {

        // Create object
        MainMenu window = new MainMenu();

        // Chose default close operation
        log.AddToLog("Set default close operation", "JFrame", "INFO");
        window.setDefaultCloseOperation(EXIT_ON_CLOSE);

        // Set window visible
        log.AddToLog("Set window visible", "JFrame", "INFO");
        window.setVisible(true);

        // Set window icon
        log.AddToLog("Set window icon", "JFrame", "INFO");
        ImageIcon img = new ImageIcon(MainMenu.class.getResource("/resources/WindowIcon_32x32.png"));
        window.setIconImage(img.getImage());

    }

    /*
     * What is to be done after pressing the button
     */
    @Override
    public void actionPerformed(ActionEvent e) {

        Object source = e.getSource();

        // Exit button
        if (source==bExit) {

            try {
                log.AddToLog("Exit button clicked", "ActionListener", "INFO");
            } catch (IOException e2) {
                e2.printStackTrace();
            }
            Exit exit = new Exit();
            try {
                exit.Exit();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

        // Start bot button
        if (source==bStartBot) {

            try {
                log.AddToLog("Start bot button clicked", "ActionListener", "INFO");
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

        // Options button
        if (source==bOptions) {

            try {
                log.AddToLog("Options button clicked", "ActionListener", "INFO");
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

        // About LikeplusBot button
        if (source==bAboutLikeplusBot) {

            try {
                log.AddToLog("About LikeplusBot button clicked", "ActionListener", "INFO");
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

        // THIS IS PERFORMED AFTER THIS BUTTON IS PRESSED ----------------------------------------------
        // Changelog button
        if (source==bChangelog) {

            try {
                log.AddToLog("Changelog button clicked", "ActionListener", "INFO");
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            Changelog changelog = new Changelog();

            // AND I WANT THIS METHOD THAT IS CALLED HERE SHOWING NEW BUTTONS IN THE WINDOW -------------
            try {
                changelog.Changelog();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

    }

}

Надеюсь, вы что-то понимаете:)

1 Ответ

0 голосов
/ 22 июня 2020

Вы должны использовать setVisible (false) для компонентов, которые вы хотите скрыть, и setVisible (true) для компонентов, которые хотите показать. Вероятно, вам нужно добавить логический параметр в ваш метод changeLog. И скрывать или показывать вещи согласно параметру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...