import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class JFrameTest {
private MyListener listener = new MyListener();
private JButton clear = null;
private JButton addOne = null;
private static JFrame frame = null;
private JTextField text1 = null;
private JTextField text2 = null;
private JTextField text3 = null;
private JTextField text4 = null;
private JTextField text5 = null;
private JTextField text6 = null;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
//Create and set up the window.
frame = new JFrame("Button & Listener Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JFrameTest().createGUI());
//Display the window.
frame.setSize(800, 500);
frame.setVisible(true);
}
public JTabbedPane createGUI(){
JTabbedPane tabbedPane = new JTabbedPane();
JPanel one = new JPanel();
one.setLayout(new BorderLayout());
JPanel test = new JPanel();
JPanel test2 = new JPanel();
JLabel label1 = new JLabel ("Pound");
JLabel label2 = new JLabel("Ounce :" );
JLabel label3 = new JLabel("Ton :");
JLabel label4 = new JLabel("Tonne :");
JLabel label5 = new JLabel("Kilogram :");
JLabel label6 = new JLabel("Gram :");
text1 = new JTextField(5);
text2 = new JTextField(5);
text3 = new JTextField(5);
text4 = new JTextField(5);
text5 = new JTextField(5);
text6 = new JTextField(5);
JButton button = new JButton();
clear = new JButton("Clear");
clear.addActionListener(listener);
text1.setText("0");
text2.setText("0");
text3.setText("0");
text4.setText("0");
text5.setText("0");
text6.setText("0");
test.add(label1);
test.add(text1);
test.add(label2);
test.add(text2);
test.add(label3);
test.add(text3);
test2.add(label4);
test2.add(text4);
test2.add(label5);
test2.add(text5);
test2.add(label6);
test2.add(text6);
one.add(test, BorderLayout.NORTH);
one.add(test2, BorderLayout.CENTER);
one.add(clear, BorderLayout.SOUTH);
tabbedPane.addTab("Tab 1", one);
JPanel two = new JPanel();
tabbedPane.addTab("Tab 2", two);
return tabbedPane;
}
public class MyListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();
String sourceName = source.getName();
if(sourceName.equals("Clear"))
{
System.out.println("yeet");
text1.setText("00");
text2.setText("00");
text3.setText("00");
text4.setText("00");
text5.setText("00");
text6.setText("00");
}
else
{
System.out.println("nah");
}
}
}
}
我的错误代码是:线程" awt-esventqueue-0"中的异常 java.lang.nullpoInterException 在jframetest.jframetest $ mylistener.actionperformed(jframetest.java:123) 在javax.swing.abstractbutton.fireactionperformed(AbstractButton.java:2022) 在javax.swing.abstractbutton $ handler.ActionPerformed(AbstractButton.java:2348) 在javax.swing.defaultbuttonmodel.fireactionperformed(DefaultButtonModel.java:402) 在javax.swing.defaultbuttonmodel.setpress(defaultbuttonmodel.java:259) 在javax.swing.plaf.basic.basicbuttonlistener.mousereared(basic buttonlistener.java:252) 在java.awt.component.processmouseeevent(component.java:6533) 在Javax.swing.jcomponent.jcomponent.processmouseeevent(jcomponent.java:3324) 在java.awt.component.processevent(component.java:6298) 在java.awt.container.processevent(Container.java:2236) at Java.awt.component.dispatcheventimpl(component.java:4889) 在java.awt.container.dispatcheventimpl(Container.java:2294) 在java.awt.component.dispatchevent(component.java:4711) 在java.aw.aw.lightweightdispatcher.retargetmouseevent(container.java:4888) 在java.aw.aw.lightweightdispatcher.processmouseeevent(Container.java:4525) 在java.aw.aw.lightweightdispatcher.dispatchevent(container.java:4466) 在java.awt.container.dispatcheventimpl(Container.java:2280) 在java.aw.window.dispatcheventimpl(window.java:2746) 在java.awt.component.dispatchevent(component.java:4711) 在java.aw.awt.eventqueue.dispatcheventimpl(eventqueue.java:758) 在Java.aw.awt.eventqueue.Access $ 500(Eventqueue.java:97) 在java.aw.awt.eventqueue $ 3.run(eventqueue.java:709) 在java.aw.awt.eventqueue $ 3.run(Eventqueue.java:703) 在java.security.accesscontroller.doprivileged(本机方法) 在java.security.security.protectiondomain $ javasecurityaccesimpl.dointersectionprivilege(protectiondomain.java:80) 在java.security.security.protectiondomain $ javasecurityaccessimpl.dointersectionprivilege(protectiondomain.java:90) 在java.aw.awt.eventqueue $ 4.run(Eventqueue.java:731) 在java.aw.awt.eventqueue $ 4.run(Eventqueue.java:729) 在java.security.accesscontroller.doprivileged(本机方法) 在java.security.security.protectiondomain $ javasecurityaccesimpl.dointersectionprivilege(protectiondomain.java:80) 在java.aw.awt.eventqueue.dispatchevent(eventqueue.java:728) 在java.aw.awt.eventdispatchthread.pumponeeventforfilters(eventdispatchthread.java:201) 在java.aw.awt.eventdispatchthread.pumpeventsforfilter(eventdispatchthread.java:116) 在java.aw.awt.eventdispatchthread.pumpeventsforhierarchy(eventdispatchthread.java:105) 在java.aw.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:101) 在java.aw.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:93) 在java.aw.awt.eventdispatchthread.run(eventdispatchthread.java:82)
JButton
的仅有的两个用法基本上是
clear = new JButton("Clear");
clear.addActionListener(listener);
所以,您没有为Component
设置name
。
这里sourceName
是null
。
String sourceName = source.getName();
这是您的NullPointerException
。
sourceName.equals("Clear")
一般提示,在比较 String
s时,请始终使用永远不会执行操作的 null
,在这种情况下
if ("Clear".equals(sourceName)) { ... }
Component#getName
方法(继承)似乎是为您构建名称,如果是null
if (name == null && !nameExplicitlySet) {
synchronized(getObjectLock()) {
if (name == null && !nameExplicitlySet)
name = constructComponentName();
}
}
return name;
但是,constructComponentName
返回null
String constructComponentName() {
return null; // For strict compliance with prior platform versions, a Component
// that doesn't set its name should return null from
// getName()
}
这是因为您没有设置按钮的 .name
属性,而只是 text
属性。默认构造函数设置text
属性而不是name
。
您可以设置按钮的name
属性。
clear = new JButton("Clear");//this just set the text property
clear.setName("Clear"); //here
或只是更改您的条件,例如
String sourceName = source.getText(); //chage .getName for .getText
if(sourceName.equals("Clear")) //now will work