gpt4 book ai didi

java - 将项目从不同的类添加到 JComboBox

转载 作者:行者123 更新时间:2023-11-30 04:59:20 25 4
gpt4 key购买 nike

我一直在尝试在将新项目添加到后端数据库时更新 JComboBox。

在实际代码中,有一个单独的类来处理添加对话框,当添加新项目时,它会更新数据库,然后应该通过调用在 main 中接受 String 的方法将相同的项目添加到下拉菜单中图形用户界面类。 (尝试遵循模型- View - Controller )。

下面是一个触发错误的最小示例,尽管在实际应用程序中它会默默地失败。

我有一种预感,它与对象实例有关。另外,为了填充列表,我使用 addItem() 迭代列表,以确保该列表正常工作并且 ComboBox 是可变的。

感谢汤姆的帮助

import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class TestComboBox extends JPanel implements ActionListener{

JComboBox moduleList = new JComboBox(new DefaultComboBoxModel());
TestComboBox testComboBox;
JFrame frame;

public void actionPerformed(ActionEvent e){
if("additem".equals(e.getActionCommand())){
addItem("Item");
}
if("additemfail".equals(e.getActionCommand())){
testComboBox.addItemFail("Item Fail");
}
}

public void addItem(String item){
moduleList.addItem(item);
}

public void addItemFail(String item){
testComboBox = new TestComboBox();
moduleList.addItem(item);
}


protected JPanel createPanel(){
JPanel panel = new JPanel(false);

String[] getModuleList = {"MODULE 1", "MODULE 2"};
moduleList = new JComboBox(new DefaultComboBoxModel(getModuleList));
panel.add(moduleList);

JButton additem = new JButton("Add Item");
additem.setActionCommand("additem");
additem.addActionListener(this);
panel.add(additem);

JButton additemfail = new JButton("Add Item Fail");
additemfail.setActionCommand("additemfail");
additemfail.addActionListener(this);
panel.add(additemfail);

return panel;
}

public void createAndShowGui(){
testComboBox = new TestComboBox();
frame = new JFrame("JComboTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(testComboBox.createPanel());
frame.setSize(450, 150);
frame.setVisible(true);
}

public static void main(String[] args){
TestComboBox t = new TestComboBox();
t.createAndShowGui();
}
}

抛出异常

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionat TestComboBox.actionPerformed(TestComboBox.java:16)    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)    at java.awt.Component.processMouseEvent(Component.java:6268)    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)    at java.awt.Component.processEvent(Component.java:6033)    at java.awt.Container.processEvent(Container.java:2045)    at java.awt.Component.dispatchEventImpl(Component.java:4629)    at java.awt.Container.dispatchEventImpl(Container.java:2103)    at java.awt.Component.dispatchEvent(Component.java:4455)    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4297)    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)    at java.awt.Container.dispatchEventImpl(Container.java:2089)    at java.awt.Window.dispatchEventImpl(Window.java:2517)    at java.awt.Component.dispatchEvent(Component.java:4455)    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)    at java.awt.EventQueue.access$000(EventQueue.java:96)    at java.awt.EventQueue$1.run(EventQueue.java:608)    at java.awt.EventQueue$1.run(EventQueue.java:606)    at java.security.AccessController.doPrivileged(Native Method)    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)    at java.awt.EventQueue$2.run(EventQueue.java:622)    at java.awt.EventQueue$2.run(EventQueue.java:620)    at java.security.AccessController.doPrivileged(Native Method)    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)    at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

最佳答案

您应该简单地在 actionPerformed 方法中调用 addItemFail("Item Fail");,而不是 testComboBox.addItemFail("Item Fail");

编辑:并且您不应该在 addItemFail 方法中再次重新创建同一类的对象(再次这样做有什么意义?)

关于java - 将项目从不同的类添加到 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com