2017-08-03 87 views
-1

我试图制作一个Java Gui,将JTextField上的文本打印到标签中。 因此,在运行时,我会在JTextField中写一些东西,然后我会按下一个按钮,在标签中打印JTextField的内容。从JTextField打印文本

但该计划给我一个java.lang.NullPointerException。方法ActionListener有什么不对吗?

你能帮我吗?

代码如下:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.util.*; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EmptyBorder; 
import java.awt.Rectangle; 
import javax.swing.SwingConstants; 
import java.awt.event.ActionListener; 
import java.util.EventObject; 
import java.awt.event.ActionEvent; 

public class MastermindGui1 extends JFrame { 

public static JTextField insNome; 
public static JLabel welcomeLbl; 

private JPanel contentPane; 
Container contenuto; 

public MastermindGui1() { 
    JFrame finestra = new JFrame("MASTERMIND"); 
    finestra.setResizable(false); 

    finestra.setBounds(200,200,300,300); 
    contenuto = finestra.getContentPane(); 
    contenuto.setBackground(Color.YELLOW); 
    finestra.getContentPane().setLayout(null); 

    JTextField insNome = new JTextField(); 
    insNome.setBounds(21, 70, 151, 35); 
    contenuto.add(insNome); 

    JLabel welcomeLbl = new JLabel(""); 
    welcomeLbl.setVisible(false); 
    welcomeLbl.setBounds(58, 138, 180, 74); 
    welcomeLbl.setBackground(Color.ORANGE); 
    contenuto.add(welcomeLbl); 

    JLabel lblNewLabel = new JLabel("INSERISCI IL TUO NOME"); 
    lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); 
    lblNewLabel.setBounds(75, 11, 142, 23); 
    finestra.getContentPane().add(lblNewLabel); 

    JButton stampa = new JButton("STAMPA"); 
    stampa.addActionListener(new stampa()); 
    stampa.setBounds(195, 76, 89, 23); 
    contenuto.add(stampa); 
    stampa.addActionListener(new stampa()); 

    finestra.setVisible(true); 
    finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

private class stampa implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     insNome = (JTextField) e.getSource(); 

     String testo = insNome.getText(); 

     welcomeLbl.setText(testo); 
    } 
} 

public static void main(String[] args) { 
      MastermindGui1 finestra = new MastermindGui1(); 
     } 
} 
+0

你必须'stampa.addActionListener(new stampa());'lines ...只有一个需要。也不要使用小写的类名... –

+0

也是这行'insNome =(JTextField)e.getSource();'用不正确的值覆盖你的'insNome'变量,因为'getSource()'是按钮,不是textfield ... –

+0

为什么标题中的SHOUTING? – EJoshuaS

回答

4

替换JLabel welcomeLbl = new JLabel("");有:

welcomeLbl = new JLabel(""); 

public static JLabel welcomeLbl;仍然null因为你没有初始化,但确实创造了新的局部变量

0

由于马克西姆。我将你所说的代码替换成现在的代码。 我也这样删除:

“私有类斯坦帕实现ActionListener的”

和我改变像这样创建的类:

“公共类MastermindGui1扩展JFrame中实现的ActionListener”。

+1

如果Maxim的建议解决了您的问题,那么请不要忘记通过点击复选标记来“接受”答案,以便人们知道问题已解决。此外,这不是一个答案,所以不应该发布为一个。如果你愿意,你可以编辑你的问题。删除这个答案。 – camickr