Swing, menu, kilka paneli i maly problem..

0

Witam wszystkich.

Tworze mala aplikacje do malo waznych celow. Przyznaje, w javie i swingu to moja pierwsza, dlatego prosze o wyrozumialosc.
Problem mam nastepujacy.

Finalnie aplikacja powinna wygladac nastepujaco
Untitled.jpg

i problem mam taki iz podzielilem sobie ladnie elementy na osobne klasy/pliki. Poki co wyglada to mniej wiecej tak:

package jbexporter.gui;

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

/**
 * Created by Skubby.
 */
public class MainFrame extends JFrame {
    private JMenu types = new JMenu("Types");
    private JMenuItem vests = new JMenuItem("Vests");
    // inne elementy

    /**
     * Constructor
     */
    public MainFrame() {
        super("Example title");
        init();
    }

    /**
     * Init elements
     */
    private void init() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setSize(900, 800);

        setJMenuBar(initMenu());
        setLayout(new BorderLayout());

        add(new CommonPanel(), BorderLayout.NORTH);
        add(new OptionsPanel(), BorderLayout.WEST);
        add(new SubmitPanel(), BorderLayout.EAST);
    }

    /**
     * Init menu
     * @return JMenuBar
     */
    private JMenuBar initMenu() {
        JMenuBar menuBar = new JMenuBar();

        //dodawanie innych typow
        types.add(vests);

        menuBar.add(types);

        return menuBar;
    }
}

package jbexporter.gui;

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

/**
 * Created by Skubby.
 */
public class CommonPanel extends JPanel {
    private JLabel nameLabel = new JLabel("CommonPanel");

    /**
     * Constructor
     */
    public CommonPanel() {
        setBackground(Color.yellow);
        setPreferredSize(new Dimension(900, 400));

        add(nameLabel);
    }
}
package jbexporter.gui;

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

/**
 * Created by Stubby.
 */
public class OptionsPanel extends JPanel {
    private JLabel nameLabel = new JLabel("Options panel");

    /**
     * Constructor
     */
    public VestOptionsPanel() {
        setBackground(Color.red);
        setPreferredSize(new Dimension(450, 400));

        add(nameLabel);
    }
}

package jbexporter.gui;

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

/**
 * Created by Skubby.
 */
public class SubmitPanel extends JPanel {
    private JLabel nameLabel = new JLabel("Submit panel");

    /**
     * Constructor
     */
    public SubmitPanel() {
        setBackground(Color.green);
        setPreferredSize(new Dimension(450, 400));

        add(nameLabel);
    }
}

I o co w tym chodzi:
Mianowicie o to, ze

  1. po kliknieciu jakiegos elementu menu panele common i submit pozostaja bez zmian, zas panel options sie zmienia (dla kazdego elementu jest osobny)
  2. W panelu submit bedzie button ktory bedzie robil swoje na podstawie danych z wszystkich trzech paneli.

I w czym mam problem:

  1. jak z poziomu panelu submit dostac dane z pozostalych dwoch paneli.
  2. zamiana panelu options po akcji(click) w menu (w ogole to zastanawialem sie nad przeniesieniem calego menu do osobnego pliku klasy, ale wtedy tez pojawia sie problem dostepu).

Bylbym wdzieczny za podpowiedz, naprowadzenie. Nie prosze o konkretne rozwiazanie. Wiem, ze moje problemy sa trywialne, ale prosze o wyrozumialosc.

Skubby.

1

Musisz przekazywać i przechowywać referencje.

package jbexporter.gui;
 
import javax.swing.*;
import java.awt.*;
 
/**
 * Created by Skubby.
 */
public class SubmitPanel extends JPanel {
    private JLabel nameLabel = new JLabel("Submit panel");
    private CommonPanel commonPanel = null;
    private OptionsPanel optionsPanel = null;
    /**
     * Constructor
     */
    public SubmitPanel(CommonPanel commonPanel, OptionsPanel optionsPanel) {
        this.commonPanel = commonPanel;
        ...
        setBackground(Color.green);
        setPreferredSize(new Dimension(450, 400));
 
        add(nameLabel);
    }
}

i odpowiednio zmienić wywołania konstruktorów.

0

Tak tez przypuszczalem.
Wg tego moglbym spokojnie wyrzucic menu do osobnej klasy zeby zachowac nalezyty porzadek i tylko przekazac OptionsPanel do menu i operowac na referencji.

A do submit panel przekazac common i options i Voilà :)

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