Zmiana panelu po wybraniu JMenuItem

0

Witam mam taki kod

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.Scrollbar;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class main extends JFrame implements ActionListener, ItemListener{
	
	JPanel panel = new JPanel();
	JScrollPane spanel;
	JMenuItem download, upload, incasation;
	JTextField txt;
	
	public main()
	{
		super("Gruvi 1.0");
		setSize(800, 600);
		init();
		setVisible(true);
	}
	
	public void init()
	{
		JMenuBar menub = new JMenuBar();
		setJMenuBar(menub);
		JMenu m = new JMenu("Actions");
		menub.add(m);
		download = new JMenuItem("Download");
		download.addActionListener(this);
		incasation = new JMenuItem("Incasation");
		incasation.addActionListener(this);
		upload = new JMenuItem("Upload");
		upload.addActionListener(this);
		
		m.add(download);
		m.addSeparator();
		m.add(incasation);
		m.addSeparator();
		m.add(upload);
		

	}
	
	public static void main(String[] args)
	{
		new main();
	}

	public void actionPerformed(ActionEvent e) 
	{
		txt = new JTextField(20);
		if(e.getSource() == download)
		{
			txt.setText("download");
		}
		else if(e.getSource() == incasation)
		{
			txt.setText("incasation");
		}
		else if(e.getSource() == upload)
		{
			txt.setText("upload");
		}
		
		spanel = new JScrollPane(panel);
		getContentPane().add(spanel, BorderLayout.CENTER);
	}
	
}

I jak zrobić żeby w panelu w zależności od wybranej opcji z menu pojawiało się co innego, a dokładniej żeby były ładowane z różnych klas.

Pozdrawiam
KS

0

może coś takiego ? :

public class Main extends JFrame implements ActionListener, ItemListener {

    JPanel panel = new JPanel();
    JPanel innerPan = new JPanel();
    JScrollPane spanel;
    JMenuItem download, upload, incasation;
    JTextField txt;

    public Main() {
        super("Gruvi 1.0");
        setSize(800, 600);
        init();
        setVisible(true);
    }

    public void init() {
        JMenuBar menub = new JMenuBar();
        setJMenuBar(menub);
        JMenu m = new JMenu("Actions");
        menub.add(m);
        download = new JMenuItem("Download");
        download.addActionListener(this);
        incasation = new JMenuItem("Incasation");
        incasation.addActionListener(this);
        upload = new JMenuItem("Upload");
        upload.addActionListener(this);

        m.add(download);
        m.addSeparator();
        m.add(incasation);
        m.addSeparator();
        m.add(upload);
        add(panel);
        panel.setBackground(Color.red);       
        panel.setLayout(new GridLayout(0, 1));


    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame fr = new Main();
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });
    }

    public void actionPerformed(ActionEvent e) {

        if ((((JMenuItem) e.getSource()).getText().equals("Upload"))) {
            System.out.println("change");
            panel.add(innerPan);
            innerPan.setBackground(Color.BLACK);
            panel.revalidate();
            panel.repaint();
        }
    }

    public void itemStateChanged(ItemEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
 

oczywiście zamiast panelu innerPan możesz wstawiać co tylko zechcesz (ale bez przesady).
proponowałbym ci uruchamianie swojego programu w wątku (jak to zrobiłem powyżej).
Niedoczytałem dlaczego ale tak powinno się robić : )

0

A jak zrobić żeby się nie dodawały labele ale się nadpisywały ?

public void actionPerformed(ActionEvent e) 
    {
        if ((((JMenuItem) e.getSource()).getText().equals("Upload"))) {
        	innerPan.add(new JLabel("upload"));
            panel.add(innerPan);
            panel.revalidate();
            panel.repaint();
        }
        else if ((((JMenuItem) e.getSource()).getText().equals("Incasation"))) {
        	innerPan.add(new JLabel("incasation"));
            panel.add(innerPan);
            panel.revalidate();
            panel.repaint();
        }
        else if ((((JMenuItem) e.getSource()).getText().equals("Download"))) {
        	innerPan.add(new JLabel("download"));
            panel.add(innerPan);
            panel.revalidate();
            panel.repaint();
        }
    }
0

musisz usunąć poprzednie...

removeAll albo indywidualnie remove

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