Małe zamieszanie z klasami...

0

Dzień dobry

Na początku chciałbym się z wszystkimi przywitać, ponieważ jest to mój pierwszy post na forum, a obecnie zaczynam naukę programowania w Javie. Wcześniej bywałem na tym forum sporadycznie, ale jeszcze nie jako użytkownik.

Jak już wspomniałem, od jakiegoś czasu bawię się w Javie. Obecnie głównym źródłem nauki jest Cave of Programming. Do tego posiłkuję się książką "JAVA Podstawy, wydanie X". Czasami doczytuję też z kursu na stronie javastart.

Obecnie jestem na etapie przerabiania Swinga. Naczytałem się trochę po forach czy w ogóle warto tego się uczyć, były różne opinie. Ale chyba większość była takich, że warto wiedzieć z czym to się je, co zaowocuje w przyszłej nauce Javy. Po opanowaniu ramek wchodzę w sprawy związane ze "słuchaczami". O ile główny sens potrafię mniej więcej zrozumieć, to mam problem z pobieraniem niektórych danych z innych klas. Poniżej przedstawiam trzy klasy oraz opis problemu.

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

public class Main {
    public static void main(String[] args){
        EventQueue.invokeLater(new Runnable(){
            public void run() {
                JFrame frame = new MainFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.setTitle("Workers");
            }
        });
    }
}

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


public class MainFrame extends JFrame {

    private DetailsPanel details;

    public MainFrame() {
        setSize(500, 350);

        //layout
        setLayout(new BorderLayout());

        //components
        JTextArea textArea = new JTextArea();
        details = new DetailsPanel();

        //added contain pane
        Container cont = getContentPane();

        cont.add(textArea, BorderLayout.CENTER);
        cont.add(details, BorderLayout.WEST);

        }
    }



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


public class DetailsPanel extends JPanel {
    public DetailsPanel() {
        Dimension size = getPreferredSize();
        size.width = 250;
        setPreferredSize(size);

        setBorder(BorderFactory.createTitledBorder("Personal Details"));

        JLabel nameLabel = new JLabel("Name : ");
        JLabel surnameLabel = new JLabel("Surname : ");

        JTextField nameField = new JTextField(10);
        JTextField surnameField = new JTextField(10);

        JButton button = new JButton("Add");

        /*
        JButton yellowButton = new JButton("Żółty");
        JPanel DetailsPanel;
        DetailsPanel = new JPanel();
        DetailsPanel.add(yellowButton);
        add(DetailsPanel);

        class ColorAction  implements ActionListener{
            private Color backgroundColor;

            public ColorAction(Color C){
                backgroundColor = C;
            }

            public void actionPerformed(ActionEvent event){
                DetailsPanel.setBackground(backgroundColor);
            }
        }
        */

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                String name = nameField.getText();
                String surname = surnameField.getText();

                String all = name + " " + surname + "\n";

                System.out.println(all);
            }
        });

        setLayout(new GridBagLayout());

        GridBagConstraints gc = new GridBagConstraints();

        //first colums
        gc.weightx = 0.5;
        gc.weighty = 0.5;

        gc.anchor = GridBagConstraints.LINE_END;
        gc.gridx = 0;
        gc.gridy = 0;
        add(nameLabel, gc);

        gc.gridx = 0;
        gc.gridy = 1;
        add(surnameLabel, gc);

        //second colums
        gc.anchor = GridBagConstraints.LINE_START;

        gc.gridx = 1;
        gc.gridy = 0;
        add(nameField, gc);

        gc.gridx = 1;
        gc.gridy = 1;
        add(surnameField, gc);

        //final row
        gc.weighty = 10;
        gc.anchor = GridBagConstraints.FIRST_LINE_START;

        gc.gridx = 1;
        gc.gridy = 2;
        add(button, gc);

    }
}

Kod w dużej części jest taki jak w Cave of Programming, bo jak wspomniałem, jest to kurs który aktualnie przerabiam. W ostatniej klasie widać zakomentowaną część kodu. Jest to kod odpowiedzialny za zmianę koloru tła po wciśnięciu przycisku, który także jest w tej klasie.Niestety tło nie do końca się zmienia, a konkretnie tylko w wokół przycisku. Do tego chciałbym przenieść tą klasę i zakomentowane zmienne do osobnego pliku, jednak nie wiem jak później dostać się tych zmiennych z tej klasy, Konkretnie chodzi mi o zmianę tła całego panelu.

Za wszelkie konstruktywne odpowiedzi wielkie dzięki. Jeśli robię coś źle lub mój sposób nauki jest nieodpowiedni czy też możan go usprawnić to będę wdzięczny za rady.

Pozdrawiam

0

Po pierwsze nie masz (przynajmniej tutaj) w kodzie "przypięcie" słuchacza do przycisku czyli powinieneś mieć:

yellowButton.addActionListener(new ColorAction(Color.yellow));

Jeśli chcesz zmienić kolor całego panelu to rozumiem, że masz na myśli panel z danymi osobowymi to zmień kolor właściwego panelu czyli zamiast

detailsPanel.setBackground(backgroundColor);

powinieneś mieć kod:

setBackground(backgroundColor);

Ty zmieniasz kolor dodatkowego panelu który został dołączony do głównego panelu.

0

Dzięki za odpowiedź.
Możesz mi jeszcze wytłumaczyć jak dokonać poprawnego "podziału" pliku? Chodzi mi o to, żeby kod był jak najbardziej przejrzysty. Ten co wrzuciłem wyżej to jakby taki zlepek w całość. Chciałbym umieścić go w kilku plikach. Jednak nie wiem, co w każdym powinno się znajdować - jak rozdzielić deklaracja, implementacje itd.
Może być na przykładzie powyższego kodu, chociaż rozumiem, że jest on za krótki na jakiekolwiek rozdzielanie. Jednak chodzi mi o sam sens.

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