Dodawanie JComponent do JPanel

0

Dzień Dobry wszystkim.
Dopiero się uczę i natknąłem się na pewien problem, a mianowicie po dodaniu JComponent do JPanel po wybraniu z JComboBox listy danej opcji i wciśnięciu przycisku start, obiekty się nie wyświetlają w prawym panelu, jeśli ktoś wie dlaczego, co należy poprawić, prosił bym o pomoc !


import javax.swing.JFrame;


public class RunApp {

	public static void main(String[] args) {
		
		JFrame mainFrame = new MyPanel();
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		mainFrame.setVisible(true);
		
	}

}

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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



public class MyPanel extends JFrame {
	
	private JPanel leftPanel = null;
	private JPanel rightPanel = null;
	private JPanel mainPanel = null;
	private Toolkit kit = Toolkit.getDefaultToolkit();
	private Dimension screenSize = kit.getScreenSize();
	private int screenHeight = screenSize.height;
	private int screenWidth = screenSize.width;
	private JButton start = null;
	private JButton restart = null;
	private JComboBox<String> menuBox = new JComboBox<>();
	
	public MyPanel() {
		
		mainPanel = new JPanel();
		
		mainPanel.setBackground(Color.orange);
		mainPanel.setPreferredSize(new Dimension(screenWidth, screenHeight));
		
		leftPanel = new JPanel();
		leftPanel.setBackground(Color.blue);
		leftPanel.setPreferredSize(new Dimension(screenWidth/6, screenHeight));
	
		menuBox.addItem("Gaussian Wave - non Dispersive");
		menuBox.addItem("Gaussian Wave - Dispersive");
		
		start = new JButton("Start");
		restart = new JButton("Restart");
		
		leftPanel.add(menuBox);
		leftPanel.add(start);
		leftPanel.add(restart);
		
		
		rightPanel = new JPanel();
		rightPanel.setBackground(Color.red);
		rightPanel.setPreferredSize(new Dimension(screenWidth -( screenWidth/5 ), screenHeight));
		
		start.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {

				if(menuBox.getItemAt(menuBox.getSelectedIndex()).equals("Gaussian Wave - non Dispersive")) {
					rightPanel.setBackground(Color.white);
					rightPanel.add(new MyComponent());
					rightPanel.revalidate();
					rightPanel.repaint();
					
				} else if(menuBox.getItemAt(menuBox.getSelectedIndex()).equals("Gaussian Wave - Dispersive")) {
					rightPanel.add(new MyComponent());
					rightPanel.revalidate();
					rightPanel.repaint();
				}
			}
		});
		
		
		restart.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				rightPanel.setBackground(Color.RED);
				rightPanel.revalidate();
				rightPanel.repaint();

			}
		});
	
		mainPanel.add(leftPanel);
		mainPanel.add(rightPanel);
		add(mainPanel);
	
		

	}

}

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

public class MyComponent extends JComponent {



	
	public MyComponent() {

	}

	
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		Rectangle2D rect = new Rectangle2D.Double(0, 0, 10, 10);
                g2.draw(rect);
		
	}
	

	
}

Stworzyłem dla przykładu szybką klasę MyComponent, która rysuje prostokąt, jeśli wywołam konstruktor bezposrednio :


public MyPanel() {
         add(new MyComponent());
}

to bez problemu zadziała, ale jeśli jak opisałem wyżej, po wybraniu z listy i w prawym panelu już nie; / prosił bym o pomoc!

0

Ustal rozmiar komponentu MyComponent:

    public MyComponent() {
        setPreferredSize(new Dimension(...));
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1