基本上,我目前有这个GUI:
它应该做的是将左侧滚动窗格中的所有突出显示的项目添加到右侧滚动窗格。但是,每当我按下"添加"按钮,我得到一个NullPointerException。当 allColsPanel.getList()。getSelectedValuesList()执行时,AddListener的actionPerformed下的ColumnMainPanel类中发生错误。
我的代码如下所示:
在主框架中:
ColumnMainPanel columnsPanel = new ColumnMainPanel(allColumns);
frame.setContentPane(columnsPanel);
ColumnMainPanel:
public class ColumnMainPanel extends JPanel {
private AllColumnsPanel allColsPanel;
private SelectedColumnsPanel selColsPanel;
private CentralButtonsPane buttonPane;
public ColumnMainPanel() {
allColsPanel = null;
selColsPanel = null;
buttonPane = null;
}
public ColumnMainPanel(String[] allColumns) {
super(new BorderLayout());
this.dbe = d;
setSize(250, 700);
allColsPanel = new AllColumnsPanel(allColumns);
selColsPanel = new SelectedColumnsPanel(allColumns.length);
buttonPane = new CentralButtonsPane();
add(allColsPanel, BorderLayout.WEST);
add(buttonPane, BorderLayout.CENTER);
add(selColsPanel, BorderLayout.EAST);
}
class AddListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//int index = list.getSelectedIndex();
String[] columnsSelected;
// This next line is where I get the error:
List<String> selectedValues = allColsPanel.getList().getSelectedValuesList();
columnsSelected = new String[selectedValues.size()];
columnsSelected = (selectedValues).toArray(columnsSelected);
selColsPanel.addToList(columnsSelected);
}
}
//add RemoveListener and ExportListener here
}
AllColumnsPanel:
public class AllColumnsPanel extends ColumnMainPanel implements ListSelectionListener {
private JList<String> list;
private DefaultListModel<String> listModel;
private int numListItems;
public AllColumnsPanel(String[] allColumns) {
setSize(300, 300);
this.numListItems = allColumns.length;
listModel = createListModel(allColumns);
list = createList(listModel);
JScrollPane listScrollPane = new JScrollPane(list);
listScrollPane.setPreferredSize(new Dimension(300, 300));
add(listScrollPane);
}
public DefaultListModel<String> createListModel(String[] cols) {
DefaultListModel<String> result = new DefaultListModel<String>();
for(int i = 0; i < cols.length; i ++) {
result.addElement(cols[i]);
}
return result;
}
public JList<String> createList(DefaultListModel<String> listModel) {
JList<String> result = new JList<String>(listModel);
result.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
result.setSelectedIndex(0);
result.addListSelectionListener(this);
result.setVisibleRowCount(5);
return result;
}
public JList<String> getList() {
return list;
}
public boolean isEmpty() {
return numListItems < 1;
}
}
CentralButtonsPane:
public class CentralButtonsPane extends ColumnMainPanel {
private static final String addString = "Add";
private static final String removeString = "Remove";
private static final String exportString = "Export";
public CentralButtonsPane() {
setLayout((new BoxLayout(this, BoxLayout.Y_AXIS)));
setSize(50, 40);
add(createAddButton());
add(createRemoveButton());
add(createExportButton());
}
public JButton createAddButton() {
JButton result = new JButton(addString);
result.setActionCommand(addString);
result.setSize(50, 20);
result.setAlignmentX(Component.CENTER_ALIGNMENT);
result.addActionListener(new AddListener());
return result;
}
}
我在ColumnMainPanel构造函数中初始化它后立即检查了allColsPanel,它不是null。但是,当我检查AddListener下的allColsPanel是否为null时,它返回true。我在这里错过了什么?我究竟做错了什么?
这是我得到的错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mhhls.him.dbtoexcelgui.main.ColumnMainPanel$AddListener.actionPerformed(ColumnMainPanel.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)