su1989hai 2009-06-22 10:53 采纳率: 100%
浏览 442
已采纳

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

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

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

  • 写回答

3条回答 默认 最新

  • hunterli0408 2009-06-22 17:11
    关注

    下面这段代码楼主参照一下,基本上能实现你的要求,但有些细节没有完善,比如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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的