Odczytanie tekstu z inputa - dziwny wyjątek.

0

Witam, przy próbie odczytu z inputa wyrzuca mi masę wyjątków, kombinowałem wczoraj sporo czasu, ale już nie mam siły, zwracam się do was z prośbą o pomoc :).

Pierwsza klasa:

import java.awt.EventQueue;

public class root {
	public static void main(String[] args){
		EventQueue.invokeLater(new Runnable(){
			@Override
			public void run(){
				new ActionFrame();
			}
		});
	}
}

Druga klasa:

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

public class ActionFrame extends JFrame {
	public ActionFrame(){
		super("Test akcji buttonów!");
		setSize(200,100);
		JPanel buttonPanel = new ButtonPanel();
		add(buttonPanel);
		setLayout(new GridLayout(1,1));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
}

Trzecia klasa:

import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.text.*;
import javax.swing.*;

public class ButtonPanel extends JPanel implements ActionListener {
	public static final int HEIGHT = 100;
	public static final int WIDTH = 300;
	private JButton greenButton;
	private JButton blueButton;
	private JButton redButton;
	public JTextField nameField;
	
	public ButtonPanel(){
		JTextField nameField = new JTextField();
		greenButton = new JButton("MessageBox");
		blueButton = new JButton("Blue");
		redButton = new JButton("Red");
		JLabel label1 = new JLabel("Hello everybody");
		
		greenButton.addActionListener(this);
		blueButton.addActionListener(this);
		redButton.addActionListener(this);
	
		setLayout(new GridLayout(3,4));
		setPreferredSize(new Dimension(WIDTH,HEIGHT));
		add(nameField);
		add(greenButton);
		add(blueButton);
		add(redButton);
		add(label1);
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e){
		Object source = e.getSource();
		
		if(source == greenButton){
			String text = nameField.getText();
			JOptionPane.showMessageDialog(null,text);
		}
		else if(source == blueButton)
			setBackground(Color.BLUE);
		else if(source == redButton)
			setBackground(Color.RED);
	}
}
0

Napisz co to za wyjątki i jaki input masz na myśli? Wciskanie przycisków?

0
  if(source == greenButton){
            String text = nameField.getText();
            JOptionPane.showMessageDialog(null,text);
        }

Po kliknięciu ma wyświetlić messageBox'a z tekstem, który użytkownik wpisał w polu tekstowym.

0

Próbowałeś wstawić za null jakiś argument?
Zobacz jak tutaj robią: http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

0

Nie próbowałem, ale wpisanie jakiegoś tekstu "na sztywno" działa. Dopiero, gdy próbuję przypisać ten odczytany z inputa to wyrzuca błędy.

0

Bo nameField jest nullem.

JTextField nameField = new JTextField();

W konstruktorze tworzysz zmienną lokalną o tej samej nazwie co pole klasy i dodajesz ją do panelu, natomiast pole klasy pozostaje nullem.

Powinno być tak:

nameField = new JTextField(); 
0

A no, racja teraz działa pięknie. Dzięki bardzo :D

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