在JDialog中加入一个JList,jlist中是我查询数据库得到的数据,我的问题是
1。怎样才能双击list的数据项关闭JDialog
2。将取得的值回填到jTextField中

解决方案 »

  1.   


          public class MyListDialog extends JDialog implements MouseListener{
             private javax.swing.JList jList = null;
             //加监听
             jList.addMouseListener(this);
             //事件处理
         public void mouseReleased(MouseEvent arg0) {
    if(arg0.getClickCount() == 2){
    String str = (String) jList.getSelectedValue();
                                //取得的值回填到jTextField
                                //MyFrame应替换成您的JFrame类即含有jTextField那个
    MyFrame.createInstance().jTextField.setText(str);
    this.dispose();
    }

     }
           }
      

  2.   

    还是不行。我想问一下是不是鼠标双击的问题。
    public class YiShengList extends JPanel{
      int i;
      String[] listTable = new String[i];
      public YiShengList() {
        setLayout(new BorderLayout());
        JList jlist = new JList(listTable);
        DefaultListModel model = new DefaultListModel();
        jlist.setModel(model);
        jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jlist.addMouseListener(new MouseAdapter(){
         public void mouseClicked(MouseEvent evt) {
           if (evt.getClickCount() == 2) {
             JList source = (JList) evt.getSource();
             int index = source.locationToIndex(evt.getPoint());
             if (index >= 0) {
               Object value = source.getModel().getElementAt(index);
               System.out.println(value);
             }
           }
         }
       });    //设置行数
        jlist.setVisibleRowCount(12);
        JScrollPane pane = new JScrollPane(jlist);
        add(pane, BorderLayout.CENTER);
    }
    }
      

  3.   

    您参考我的这两个文件吧。
    /*
     * 创建日期 2005-5-31
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package test;import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    //import java.awt.event.KeyEvent;
    //import java.awt.event.KeyListener;
    import javax.swing.JFrame;/**
     * @author IBM
     *
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class MyFrame extends JFrame implements /*KeyListener,*/ActionListener { private javax.swing.JPanel jContentPane = null;
    private static MyFrame mf = new MyFrame(); private javax.swing.JButton jButton = null;
    public javax.swing.JTextField jTextField = null;
    private javax.swing.JTextField jTextField1 = null;
    private String string = null;
    /* (非 Javadoc)
     * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
     */
    // public void keyTyped(KeyEvent e) {
    // // TODO 自动生成方法存根
    //
    // }
    //
    // /* (非 Javadoc)
    //  * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
    //  */
    // public void keyPressed(KeyEvent e) {
    // int keycode = e.getKeyCode();
    // if(keycode == KeyEvent.VK_ENTER){
    // this.dispose();
    // }
    //
    // }
    //
    // /* (非 Javadoc)
    //  * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
    //  */
    // public void keyReleased(KeyEvent e) {
    // // TODO 自动生成方法存根
    //
    // } public static MyFrame  createInstance(){
    return mf;
    } public static void main(String[] args) {
    MyFrame.createInstance().show();
    }
    /**
     * This is the default constructor
     */
    private MyFrame() {
    super();
    initialize();
    }
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
    this.setSize(300, 200);
    this.setContentPane(getJContentPane());
    this.getRootPane().setDefaultButton(jButton);
    }
    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private javax.swing.JPanel getJContentPane() {
    if (jContentPane == null) {
    jContentPane = new javax.swing.JPanel();
    jContentPane.setLayout(new java.awt.BorderLayout());
    jContentPane.add(getJButton(), java.awt.BorderLayout.SOUTH);
    jContentPane.add(getJTextField(), java.awt.BorderLayout.NORTH);
    jContentPane.add(getJTextField1(), java.awt.BorderLayout.CENTER);
    }
    return jContentPane;
    }
    /**
     * This method initializes jButton
     * 
     * @return javax.swing.JButton
     */
    private javax.swing.JButton getJButton() {
    if(jButton == null) {
    jButton = new javax.swing.JButton("ok");
    jButton.setSelected(true);
    }
    //jButton.addKeyListener(this);
    jButton.addActionListener(this);
    jButton.setFocusCycleRoot(true);
    return jButton;
    }
    /**
     * This method initializes jTextField
     * 
     * @return javax.swing.JTextField
     */
    private javax.swing.JTextField getJTextField() {
    if(jTextField == null) {
    jTextField = new javax.swing.JTextField();
    }
    jTextField.setFocusCycleRoot(false);
    return jTextField;
    }
    /**
     * This method initializes jTextField1
     * 
     * @return javax.swing.JTextField
     */
    private javax.swing.JTextField getJTextField1() {
    if(jTextField1 == null) {
    jTextField1 = new javax.swing.JTextField();
    }
    jTextField1.setFocusCycleRoot(false);
    return jTextField1;
    } /* (非 Javadoc)
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent e) {
    MyListDialog dlg = new MyListDialog(this,string);
    // dlg.show(true);
    dlg.setVisible(true);
    System.out.println("oo"+jTextField.getText());
    }
    }
    /*
     * 创建日期 2005-5-31
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package test;import java.awt.Frame;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.DefaultListModel;
    import javax.swing.JDialog;/**
     * @author IBM
     *
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class MyListDialog extends JDialog implements MouseListener{ private javax.swing.JPanel jPanel = null;
    private javax.swing.JList jList = null;
    private DefaultListModel listModel = new DefaultListModel();
    private String ret = null;

    public String getRet(){
    return ret;
    }
    /**
     * This method initializes 
     * 
     */
    public MyListDialog(Frame owner,String exp) {
    super();
    initialize();
    ret = exp;
    }
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
            this.setContentPane(getJPanel());
            this.setSize(296, 210);

    }
    /**
     * This method initializes jPanel
     * 
     * @return javax.swing.JPanel
     */
    private javax.swing.JPanel getJPanel() {
    if(jPanel == null) {
    jPanel = new javax.swing.JPanel();
    jPanel.add(getJList(), null);
    }
    return jPanel;
    }
    /**
     * This method initializes jList
     * 
     * @return javax.swing.JList
     */
    private javax.swing.JList getJList() {
    if(jList == null) {
    jList = new javax.swing.JList();
    }
    listModel.addElement("dog");
    listModel.addElement("cat");
    listModel.addElement("cow");
    jList.setModel(listModel);
    jList.addMouseListener(this);

    return jList;
    }
    /* (非 Javadoc)
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
     */
    public void mouseClicked(MouseEvent arg0) {
    // TODO 自动生成方法存根

    }
    /* (非 Javadoc)
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
     */
    public void mousePressed(MouseEvent arg0) {
    // TODO 自动生成方法存根

    }
    /* (非 Javadoc)
     * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
     */
    public void mouseReleased(MouseEvent arg0) {
    if(arg0.getClickCount() == 2){
    String str = (String) jList.getSelectedValue();
    //System.out.println(str);
    ret = str;
    System.out.println(ret);
    MyFrame.createInstance().jTextField.setText(ret);
    this.dispose();
    }

    }
    /* (非 Javadoc)
     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
     */
    public void mouseEntered(MouseEvent arg0) {
    // TODO 自动生成方法存根

    }
    /* (非 Javadoc)
     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
     */
    public void mouseExited(MouseEvent arg0) {
    // TODO 自动生成方法存根

    }
    }  //  @jve:visual-info  decl-index=0 visual-constraint="98,10"
      

  4.   

    myList.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e)
        {
          if (e.getClickCount() == 2)
          {
                     //do something
          }
        }       });实际就是把1楼的mouseReleased改成mousePressed试试。另外,在do something里,你的jTextField一定不在这个JDialog里,一定是在一个原来的JFrame里,可以在初始化这个JDialog时把JFrame传过来,或者把JTextField传过来,再调用
    set()的方法修改JTextField的值为(String) myList.getSelectedValue();理想的,可以用Observer Pattern来实现这个传递。
      

  5.   

    十分感谢autowind(汽车风) , apollo333()的答案,都十分正确,但是我最后还有一个小问题,就是当我list回填到Dialog的时候总是回填不进去,我找到原因是我没有写main方法我这里不需要主方法所以MyFrame.createInstance().show();应该写在什么地方?我这里是由一个Dialog弹出一个Dialog,在弹出的Dialog中有一个JList。再次感谢各位了。谢谢
      

  6.   

    在MyFrame类中添加一个方法就可以了。
    public void showMyFrame(){
       createInstance().show();
    }
      

  7.   

    autowind(汽车风),你说的方法我已经写过了,可以实现,但我在构造方法中调用时候出现空指针异常我想再次请教一下,能不能MyFrame中演示一下,再次表示感谢