Tekst do wyświetlenia dla konstruktora innej klasy.

Odpowiedz Nowy wątek
2015-01-02 02:15
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?

Pozostało 580 znaków

2015-01-02 02:30
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ł.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-02 11:59
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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