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