点击jList中的某一项,却不能显示出该项对应的详细信息(JTextArea)的疑问

public abstract class Mainform extends JFrame{

 protected JPanel pnlContent = null;
 protected JPanel pnlInformation = null;
 protected JPanel pnlButton = null;
 protected JPanel pnlTime = null;
 
 protected JList<String> jList = null;
 protected DefaultListModel<String> model = null;
 protected ProductController productController = null;
 
 protected Cart cart = null;
 protected JButton btnAdd = null; 
 protected JTextArea txtInform = null;
 protected JScrollPane scrollpnl = null;
 
 public Mainform(){
  
  this.setSize(new Dimension(800,600));
  this.setBackground(Color.LIGHT_GRAY);
  this.setLocationRelativeTo(null);
  this.setTitle("Gourmet Coffee System");
  this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  
  pnlContent = new JPanel(); 
  pnlTime = new TimePanel(); 
  pnlInformation = new JPanel();
  pnlInformation.setBackground(Color.GRAY); 
  pnlButton = new JPanel();
  pnlButton.setBackground(Color.white); 
  txtInform = new JTextArea(500,600);
  
  
  setList();
  this.add(pnlTime, BorderLayout.NORTH);
  this.add(pnlContent,BorderLayout.WEST);
  this.add(pnlButton,BorderLayout.SOUTH);
  
  addButton(pnlButton);
  
  
  showFrame();
 }
 
 private void showFrame() {
  this.setVisible(true);
 }
 
 public void setList(){
  
  model = new DefaultListModel<String>();
  productController = new ProductController("information","Product.txt");
  for(Product product: productController.readObject("information", "Product.txt")){
   model.addElement(product.getCode());
  }
  jList = new JList(model);
  jList.setPreferredSize(new Dimension(200,600));
  pnlContent.add(jList);
  setText();
 }
 
 
 public void setText(){
  txtInform.setLineWrap(true);
  txtInform.setEditable(false);
  txtInform.setBackground(Color.blue);
  jList.addListSelectionListener(new ListSelectionListener(){
   @Override
   public void valueChanged(ListSelectionEvent e) {
    if(!jList.getValueIsAdjusting()){
    /*
     *监听过程中如果匹配,增加text内容 
     */
    String code = jList.getSelectedValue();
    ProductController productcontroller = new ProductController("information", "Product.txt");
    ArrayList<Product> products = 
      productcontroller.readObject("information", "Product.txt");
     for(Product product:products){
      if(code == product.getCode()){
       txtInform.setText(product.toString());   
      }
     }
    }
   }
  });
  pnlInformation.add(txtInform);
  this.add(pnlInformation,BorderLayout.CENTER);
 }
 
 
 
 abstract void addButton(JPanel pnlButton);

参数:

jList列出目录

jTextArea

我希望JList在鼠标点击的时候能显示商品的详细信息,详细信息用JTextArea等表示。为此设置了一个事件ListSelectionListener在内部类里面读取商品文件的信息(读取文件的函数返回ArrayList)查看是否有匹配(通过比较商品的属性---Code是否一致的方式)

我认为我的逻辑上应该是没有问题的。在  txtInform.setText(product.toString());这句设了断点以后似乎发现有线程的冲突,还有空指针异常……?菜鸟一个,不懂怎么解决此类问题…跪求大佬帮忙。


这是设了断点以后发现的问题:

http://img.mukewang.com/586e36de0001ba6f06300655.jpg


刚刚step into 一步以后就显示了这个…

http://img.mukewang.com/586e36bf0001d3d605830107.jpg



感谢!!!!

Tesjunma
浏览 1549回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java