我想用JAVA语句来实现一个表格下拉框,代码怎么写??

我想实现这样的一个功能,如图
[img]/upload/attachment/117476/47bf73af-3d25-3039-a53c-d86b226591f2.jpg[/img]

代码应该怎么写???? 重酬!!!谢谢

下面这段代码楼主参照一下,基本上能实现你的要求,但有些细节没有完善,比如JTable的禁止编辑等等。

[code="java"]
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.DefaultListSelectionModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class TableSelector extends javax.swing.JFrame {
private JTextField txtItem;
private JLabel jLabel1;
private JButton btnSelect;
private JScrollPane jspTable;
private boolean isshown = false;
private JTable table;

/**
 * Auto-generated main method to display this JFrame
 */
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            TableSelector inst = new TableSelector();
            inst.setLocationRelativeTo(null);
            inst.setVisible(true);
        }
    });
}

public TableSelector() {
    super();
    initGUI();
}

private void initGUI() {
    try {
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        getContentPane().setLayout(null);
        getContentPane().add(getTxtItem());
        getContentPane().add(getBtnSelect());
        getContentPane().add(getJLabel1());
        pack();
        setSize(500, 400);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private JTextField getTxtItem() {
    if (txtItem == null) {
        txtItem = new JTextField();
        txtItem.setSize(170, 25);
        txtItem.setLocation(0, 0);
    }
    return txtItem;
}

private JButton getBtnSelect() {
    if (btnSelect == null) {
        btnSelect = new JButton("");
        btnSelect.setBounds(170, 0, 16, 23);
        btnSelect.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(isshown) {
                    TableSelector.this.getLayeredPane().remove(jspTable);
                    isshown = false;
                } else {
                    jspTable = getJspTable();
                    int x = txtItem.getX();
                    int y = txtItem.getY() + txtItem.getHeight();
                    jspTable.setLocation(x, y);
                    TableSelector.this.getLayeredPane().add(jspTable, 0);
                    isshown = true;
                    table.requestFocus();
                }
                TableSelector.this.getLayeredPane().validate();
                TableSelector.this.getLayeredPane().repaint();
            }
        });
    }
    return btnSelect;
}

private JScrollPane getJspTable() {
    if(jspTable == null) {
        Vector<Vector> rowdata = new Vector<Vector>();
        for(int i = 0; i < 10; i ++) {
            Vector<String> row = new Vector<String>();
            row.add("000" + i);
            row.add("CustomName" + i);
            row.add("CustomAddress" + i);
            rowdata.add(row);
        }
        Vector<String> header = new Vector<String>();
        header.add("自编号");
        header.add("客户名称");
        header.add("客户地址");
        table = new JTable(rowdata, header);
        table.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
        table.addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 1) {
                    int row = table.getSelectedRow();
                    txtItem.setText(table.getValueAt(row, 2).toString());
                    TableSelector.this.getLayeredPane().remove(jspTable);
                    isshown = false;
                    TableSelector.this.getLayeredPane().validate();
                    TableSelector.this.getLayeredPane().repaint();
                }
            }
            public void mouseEntered(MouseEvent e) {}
            public void mouseExited(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseReleased(MouseEvent e) {}
        });
        table.addFocusListener(new FocusListener() {
            public void focusGained(FocusEvent e) {}
            public void focusLost(FocusEvent e) {
                Component target = e.getOppositeComponent();
                if(target == btnSelect) {
                    return;
                } else {
                    TableSelector.this.getLayeredPane().remove(jspTable);
                    isshown = false;
                    TableSelector.this.getLayeredPane().validate();
                    TableSelector.this.getLayeredPane().repaint();
                }
            }
        });

        jspTable = new JScrollPane();
        jspTable.setViewportView(table);
        jspTable.setSize(new Dimension(350, 100));
    }
    return jspTable;
}

private JLabel getJLabel1() {
    if(jLabel1 == null) {
        jLabel1 = new JLabel();
        jLabel1.setText("can you see this label?");
        jLabel1.setBounds(0, 44, 165, 13);
    }
    return jLabel1;
}

}

[/code]

请明确需求
qq:124813643

呵呵,其实思路比较简单,画面左边就是一个普通的文本框,右边是一个按钮,为按钮添加一个事件,当点击按钮的时候,在文本框的正下方添加一个滚动窗口(JScrollPane),滚动窗口里面放一个JTable,用来显示数据。为JTable添加一个侦听器,每当点击JTbale的某一行的时候,就把那一行上的第二列的人名取出来,赋值给文本框。
为了更好的交互,有些细节问题需要注意:
1.可以看到在文本框的下面有一个JLabel,即“can you see this libel?”,默认使用add方法将滚动窗口添加到文本框下面的时候,绘图时滚动窗口的内容并不是完全覆盖JLabel的内容,而是两者的内容重叠在一起,看起来很别扭。因此,可以使用JFrame的JLayeredPane(分层面板)来将滚动窗口和JLabel放到不同的层次,即滚动窗口在最顶层。
2.当点击按钮时,下拉列表显示,那什么时候列表消失那?分三种情况:一,点击列表的某一项的时候;二,再次点击按钮的时候;三,焦点移出滚动窗口的时候。其中第一项可以为JTable添加鼠标点击事件(MouseListener)实现。第二项可以为按钮添加一个类属性(isshown ),来记录当前列表的显示状态来控制。第三项可以为JTable添加一个焦点事件(FocusListener)来实现。
3.有一点需要注意,那就是添加列表和删除列表的时候,为了防止在窗口上留下残影,每次都需要显示调用validate()和repaint()方法来强制窗口重绘。

基本上就这些了,但是,给你的程序仅仅是个模拟程序,从实现的方式以及效果上来说,还比较粗暴和粗糙。

另外,在问一下,你要学Swing吗?建议不要太深入,这东西用的很少,还是多学学J2EE规范吧,找工作比较好找。