typ boolean czy inny błąd ?

0

Dzień dobry!

Poniżej przedstawiłem kod programu którego zadaniem jest zmiana małych liter na duże. Niestety program nie działa tak jak powinien i wpisane litery nie są zamieniane na duże. Eclipse wyrzuca mi że powieninem zadeklarować textfield i nadać jej wartość null. Gdy to już robie program startuje itd ale nie zamienia liter. Czy typ textfield w button.addActionListener(new MyActionListener(textfield)); nie powinien być przypadkiem boolean dla kliknięcia (?)

Dzięki za podpowiedzi.

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class MyActionListener implements ActionListener {
JTextField textfield;

MyActionListener (JTextField textfield){
      this.textfield = textfield;
}
public void actionPerformed(ActionEvent e){
    textfield.setText(textfield.getText().toUpperCase());
}

}

class testingClicks {
public static void main(String []args){
JFrame frame;
JButton button;
JTextField textfield;
FlowLayout layout;
Container contentPane;

   frame = new JFrame();   
   frame.setTitle("CLICKS");
   contentPane = frame.getContentPane();

   button = new JButton("Capitalize text");
   button.addActionListener(new MyActionListener(textfield));
   contentPane.add(button);

   textfield = new JTextField("Enter text here");
   contentPane.add(textfield);

   layout = new FlowLayout();
   contentPane.setLayout(layout);

   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.pack();
   frame.setVisible(true);

}
}

0
button = new JButton("Capitalize text");
button.addActionListener(new MyActionListener(textfield)); // Tworzysz słuchacza przekazując w konstruktorze nulla
contentPane.add(button);

textfield = new JTextField("Enter text here"); // Tutaj dopiero textfield nabiera swojej wartości

Inaczej mówiąc, zła kolejność. Zmienne przekazywane są przez wartość, mam wrażenie że myślisz iż przez argumenty przekazuje się nazwy, przez co po późniejszym utworzeniu textfielda oczekujesz aktualizacji także w MyActionListener.

PS. Nie najgorszym posunięciem będzie umieszczenie klasy MyActionListener w klasie testingClicks, wtedy MyActionListener będzie mieć dostęp do pól z testingClicks i nie będziesz musiał przekazywać go przez konstruktor.

0

Ten kod pokazuje też różnicę między kompilowaniem i uruchamianiem programów w IDE a działaniami "z ręki". Kompilator Oracle'a nie kompiluje bo zmienna textfield

might have been not initialized
Po przestawieniu wierszy, kod się kompiluje, ale polecenie java nie uruchamia programu, bo klasa testingClicks nie jest public.

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