CardLayout и живопись - PullRequest
       93

CardLayout и живопись

0 голосов
/ 05 марта 2020

Я пытаюсь сделать простую многопанельную программу с панелями «запуск», «запуск» и «настройки». У меня проблема с попыткой использовать краску для рисования на панели «Выполнить». это код, и проблема в том, что он заставляет начальный экран появляться с наложенным рабочим экраном и с дополнительным набором кнопок.

package mainPackage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class mainFrame extends JFrame{
    //declarations
    JFrame frame = new JFrame("javaEyeGazeApp");
    JPanel panelCont = new JPanel();
    JPanel mainPanel = new JPanel();
    JPanel runPanel = new runPanel();
    JPanel settingsPanel = new JPanel();
    JButton mainToRun = new JButton("Run");
    JButton mainToSettings = new JButton("Settings");
    JButton settingsToMain = new JButton("Main Menu");

    public CardLayout cl = new CardLayout();

    public mainFrame(){
        panelCont.setLayout(cl);

        //adding buttons to panels and setting bg colours
        settingsPanel.add(settingsToMain);
        mainPanel.setBackground(Color.YELLOW);
        runPanel.setBackground(Color.WHITE);
        settingsPanel.setBackground(Color.WHITE);

        //adding panels to card layout
        panelCont.add(mainPanel, "main");
        panelCont.add(runPanel, "run");
        panelCont.add(settingsPanel, "settings");
        //set default view
//        cl.show(panelCont,"settings");

        //start screen aesthetics
        mainPanel.setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();

        gc.gridy = 0;
        gc.gridx = 0;
        gc.weighty = .4;
        gc.weightx = 1;

        gc.gridy = 1;
        gc.gridx = 0;
        gc.weighty = .1;
        gc.weightx = .5;
        mainPanel.add(mainToRun);
        gc.gridx = 2;
        mainPanel.add(mainToSettings);

        //button action listeners
        mainToRun.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                cl.show(panelCont, "run");
            }
        });
        mainToSettings.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                cl.show(panelCont, "settings");
            }
        });
        settingsToMain.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                cl.show(panelCont, "main");
            }
        });

        //housekeeping
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int scHeight = screenSize.height;
        int scWidth = screenSize.width;
        frame.add(panelCont);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        frame.setSize(scWidth, scHeight);
        frame.setResizable(false);
    }

    public void paint(Graphics g){
        g.drawLine(15,15,150,150);
    }
}

и мой класс runPanel выглядит как

package mainPackage;

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

public class runPanel extends JPanel {
    final Button left = new Button(0,0);
    final Button right = new Button(1,0);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int scHeight = screenSize.height;
    int scWidth = screenSize.width;

    public runPanel(){
        super();
    }



    public void paintComponent(Graphics g) {
        super.paintComponent(g);
    }

    public void paint(Graphics g){
        g.setColor(Color.ORANGE);
        g.drawRect(0,0,scWidth/2,scHeight);
        g.setColor(Color.YELLOW);
        g.drawRect(scWidth/2,0,scWidth/2,scHeight);
    }

}
...