是一个实现下拉列表功能的,照着例子打,跟例子一样啊,但是我的没法运行,例子那个可以。估计哪被我打错了,找不到!拜托了import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;public class ListDemo extends JPanel implements ListSelectionListener
{
private DefaultListModel listModel;
private JList list;
private static final String hireString = "添加";
private static final String fireString = "删除";
private JButton fireButton;
private JTextField employeeName;
public ListDemo()
{
super(new BorderLayout());
listModel = new DefaultListModel();
listModel.addElement("Alan Sommerer");
listModel.addElement("Alison Huml");
listModel.addElement("Kathy Walrath");
listModel.addElement("Lisa Friendly");
listModel.addElement("Mary Campione");
listModel.addElement("Sharon Zakhour");
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setSelectedIndex(0);
list.addListSelectionListener(this);
list.setVisibleRowCount(5);
JScrollPane listScrollPane = new JScrollPane(list);
JButton hireButton = new JButton(hireString);
HireListener hireListener = new HireListener(hireButton);
hireButton.setActionCommand(hireString);
hireButton.addActionListener(hireListener);
//禁用按钮
hireButton.setEnabled(false);
JButton fireButton = new JButton(fireString);
fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener());
JTextField employeeName = new JTextField(10);
employeeName.addActionListener(hireListener);
employeeName.getDocument().addDocumentListener(hireListener);
String name = listModel.getElementAt(list.getSelectedIndex()).toString();
//创建一个面板
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane,BoxLayout.LINE_AXIS));
buttonPane.add(fireButton);
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(employeeName);
buttonPane.add(hireButton);
buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); add(listScrollPane,BorderLayout.CENTER);
add(buttonPane,BorderLayout.PAGE_END);
}
class FireListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int index = list.getSelectedIndex();
listModel.remove(index);
int size = listModel.getSize();
if(size == 0)
{
fireButton.setEnabled(false);
}else
{
if(index == listModel.getSize())
{
index--;
}
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
}
}
class HireListener implements ActionListener,DocumentListener
{
private boolean alreadyEnabled = false;
private JButton button;
public HireListener(JButton button)
{
this.button = button;
}
public void actionPerformed(ActionEvent e)
{
String name = employeeName.getText();
if(name.equals("")||alreadyInList(name))
{
Toolkit.getDefaultToolkit().beep();//发出嘟的提示音
employeeName.requestFocusInWindow();
employeeName.selectAll();
return;
}
int index = list.getSelectedIndex();
if(index == -1)
{
index = 0;
}else
{
index++;
}
listModel.insertElementAt(employeeName.getText(),index);
employeeName.requestFocusInWindow();
employeeName.setText("");
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
protected boolean alreadyInList(String name)
{
return listModel.contains(name);
}
public void insertUpdate(DocumentEvent e)
{
enableButton();
}
public void removeUpdate(DocumentEvent e)
{
handleEmptyTextField(e);
}
public void changedUpdate(DocumentEvent e)
{
if(!handleEmptyTextField(e))
{
enableButton();
}
}
private void enableButton()
{
if(!alreadyEnabled)
{
button.setEnabled(true);
}
}
private boolean handleEmptyTextField(DocumentEvent e)
{
if(e.getDocument().getLength() <= 0)
{
button.setEnabled(false);
alreadyEnabled = false;
return true;
}
return false;
}
}
public void valueChanged(ListSelectionEvent e)
{
if(e.getValueIsAdjusting() == false)
{
if(list.getSelectedIndex() == -1)
{
fireButton.setEnabled(false);
}else
{
fireButton.setEnabled(true);
}
}
}
public static void main(String []args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new ListDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
}
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;public class ListDemo extends JPanel implements ListSelectionListener
{
private DefaultListModel listModel;
private JList list;
private static final String hireString = "添加";
private static final String fireString = "删除";
private JButton fireButton;
private JTextField employeeName;
public ListDemo()
{
super(new BorderLayout());
listModel = new DefaultListModel();
listModel.addElement("Alan Sommerer");
listModel.addElement("Alison Huml");
listModel.addElement("Kathy Walrath");
listModel.addElement("Lisa Friendly");
listModel.addElement("Mary Campione");
listModel.addElement("Sharon Zakhour");
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setSelectedIndex(0);
list.addListSelectionListener(this);
list.setVisibleRowCount(5);
JScrollPane listScrollPane = new JScrollPane(list);
JButton hireButton = new JButton(hireString);
HireListener hireListener = new HireListener(hireButton);
hireButton.setActionCommand(hireString);
hireButton.addActionListener(hireListener);
//禁用按钮
hireButton.setEnabled(false);
JButton fireButton = new JButton(fireString);
fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener());
JTextField employeeName = new JTextField(10);
employeeName.addActionListener(hireListener);
employeeName.getDocument().addDocumentListener(hireListener);
String name = listModel.getElementAt(list.getSelectedIndex()).toString();
//创建一个面板
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane,BoxLayout.LINE_AXIS));
buttonPane.add(fireButton);
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
buttonPane.add(Box.createHorizontalStrut(5));
buttonPane.add(employeeName);
buttonPane.add(hireButton);
buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); add(listScrollPane,BorderLayout.CENTER);
add(buttonPane,BorderLayout.PAGE_END);
}
class FireListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int index = list.getSelectedIndex();
listModel.remove(index);
int size = listModel.getSize();
if(size == 0)
{
fireButton.setEnabled(false);
}else
{
if(index == listModel.getSize())
{
index--;
}
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
}
}
class HireListener implements ActionListener,DocumentListener
{
private boolean alreadyEnabled = false;
private JButton button;
public HireListener(JButton button)
{
this.button = button;
}
public void actionPerformed(ActionEvent e)
{
String name = employeeName.getText();
if(name.equals("")||alreadyInList(name))
{
Toolkit.getDefaultToolkit().beep();//发出嘟的提示音
employeeName.requestFocusInWindow();
employeeName.selectAll();
return;
}
int index = list.getSelectedIndex();
if(index == -1)
{
index = 0;
}else
{
index++;
}
listModel.insertElementAt(employeeName.getText(),index);
employeeName.requestFocusInWindow();
employeeName.setText("");
list.setSelectedIndex(index);
list.ensureIndexIsVisible(index);
}
protected boolean alreadyInList(String name)
{
return listModel.contains(name);
}
public void insertUpdate(DocumentEvent e)
{
enableButton();
}
public void removeUpdate(DocumentEvent e)
{
handleEmptyTextField(e);
}
public void changedUpdate(DocumentEvent e)
{
if(!handleEmptyTextField(e))
{
enableButton();
}
}
private void enableButton()
{
if(!alreadyEnabled)
{
button.setEnabled(true);
}
}
private boolean handleEmptyTextField(DocumentEvent e)
{
if(e.getDocument().getLength() <= 0)
{
button.setEnabled(false);
alreadyEnabled = false;
return true;
}
return false;
}
}
public void valueChanged(ListSelectionEvent e)
{
if(e.getValueIsAdjusting() == false)
{
if(list.getSelectedIndex() == -1)
{
fireButton.setEnabled(false);
}else
{
fireButton.setEnabled(true);
}
}
}
public static void main(String []args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = new ListDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
}
NullPointerException at ListDemo.valueChanged(ListDemo.java:191)
...
hireButton.setEnabled(false);
//JButton fireButton = new JButton(fireString); fireButton = new JButton(fireString);//应该是这样
fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener());
private JButton fireButton;声明过了,那么为何你构造函数中还有
JButton fireButton = new JButton(fireString);
这样的语句?构造函书中的声明屏蔽了外面的声明,构造函书中所使用的是内部声明过的,你向面板添加的也是这个。可是,到了监听器中的actionPerformed方法中,你所使用的不是构造函数中所声明的这个,而是那个全局变量。而它显然是一个未被初始化得对象,其指向为null。故此抛出java.lang.NullPointerException异常。解决的方法很简单,构造函书中
JButton fireButton = new JButton(fireString);
改为
fireButton = new JButton(fireString);还有其他的一些,也类似。还有这个
JTextField employeeName = new JTextField(10);
同样道理。
加油吧,细心一些,你能够避免许多错误!!
....
// 禁用按钮
hireButton.setEnabled(false);
//JButton fireButton = new JButton(fireString); fireButton = new JButton(fireString);//应该是这样 fireButton.setActionCommand(fireString);
fireButton.addActionListener(new FireListener());
....
fireButton = new JButton(fireString);把TextField employeeName = new JTextField(10);改成
employeeName = new JTextField(10);应该就可以了。