Tekst do wyświetlenia dla konstruktora innej klasy.

0

Napotkałem się z pewnym problemem.
Mój mały programik jest podzielony na 4 klasy.

  • klasę "rozruchową"
  • klasę z ramką
  • klasę przycisków
  • klasę z oknem do wyświetlania tekstu

Kody

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Ramka extends JFrame{
	
	public static final int WIDTH = 220;
	public static final int HEIGHT = 310;

	public Ramka(){
		super("Kalkulator 1.0.0");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setSize(new Dimension(WIDTH, HEIGHT));
		setLocation(500,500);	
		
		JPanel wPanel = new WindowPanel();
		JPanel bPanel = new ButtonPanel();
		
		setLayout(new BorderLayout());
		add(wPanel, BorderLayout.NORTH);
		add(bPanel);
		
		bPanel.setLayout(null);
		
		setVisible(true);
		setResizable(false);
	}
}
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;


public class ButtonPanel extends JPanel implements ActionListener{		
	
	private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;
	
	Font myFont = new Font("Arial",Font.PLAIN, 16);
	
	WindowPanel txtOut = new WindowPanel();
	
	public ButtonPanel(){

		int Width = 40;
		int Height = 30;
		
		
		b9 = new JButton("9");
		b9.setBounds( 90, 40, Width, Height);
		b9.setMargin(new Insets(0, 0, 0, 0));
		b9.setFont(myFont);
		b9.addActionListener(this);
		
		//(...)
		// Reszta przycisków.
		
		b1 = new JButton("1");
		b1.setBounds( 4, 110, Width, Height);
		b1.setMargin(new Insets(0, 0, 0, 0));
		b1.setFont(myFont);
		b1.addActionListener(this);	
		
		add(b9);
		add(b8);
		add(b7);
		add(b6);
		add(b5);
		add(b4);
		add(b3);
		add(b2);
		add(b1);
		
		
	}	
	@Override
	public void actionPerformed(ActionEvent e) {
		Object source = e.getSource();
		
		if (source == b1)
			txtOut.tf.setText(txtOut.tf.getText() + "1");
	}
	
}
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JTextField;

public class WindowPanel extends JPanel {
	
	 protected JTextField tf;
	
	public WindowPanel() {
		tf = new JTextField();
		tf.setPreferredSize(new Dimension(206, 45 ));
		tf.setHorizontalAlignment(JTextField.RIGHT);
		add(tf);
	}
}

Chciałem przez utworzenie obiektu klasy WindowPanel móc wpisywać tekst do okienka JTextFrame.
Konstruktor jest bez przekazywanych mu wartości, gdyż potem w klasie Ramka jest tworzony jego obiekt typu Panel.
JPanel wPanel = new WindowPanel();

Co zrobić, aby zachować oddzielną klasę dla okienka, leczy aby móc wyświetlać klikane znaki na wyświetlaczu?

2

Musisz zacząć od nauki podstaw obiektowości, a nie od robienia okienek ;] Twój problem jest do bólu klasyczny (znany szerzej jako wstrzykiwanie zależności). Musisz zwyczajnie przekazać do obiektu klasy ButtonPanel referencje do obiektu WindowPanel na którym ma pracować. Możesz to zrobić przez konstruktor, możesz przez setter, możesz w dowolny inny sposób. Chodzi o to żeby obiekt ButtonPanel nie tworzył sobie WindowPanela tylko go dostawał.

0

Hmm. Ok, poszukam informacji o tym i spróbuję naprawić program. ;)

Masz rację, ale tak to jest jak po długiej przerwie ma się w końcu możliwość dalszej nauki. Muszę sobie od nowa przestudiować Thinking in Java, bo trochę tamtej wiedzy się ulotniło. :c

Pozdrawiam.

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