0

我有一个 jTextfield,我必须从 jList 中获取输入。在 FocusGained 属性上,jList 应该正好出现在 jTextfield 下方,而 jList 应该在 FocusLost 属性上消失。我已经完成了一些编码,但我遇到了问题。在 FocusGained 属性中,jList 出现,但单击它后,它会转到其他 jTextfield 的背面,该 jTextfield 位于前一个文本字段下方。以下是我的代码:

private void txtAccountFocusGained(java.awt.event.FocusEvent evt) {                                       
    jScrollPane3.setLocation(txtAccount.getX(), txtAccount.getY()+txtAccount.getHeight());
    jScrollPane3.setVisible(true);    //scrollpane associated with list
    listAccount.setVisible(true);   //listAccount is jList
}

private void listAccountMouseClicked(java.awt.event.MouseEvent evt) {                                         
    txtAccount.setText((String)listAccount.getSelectedValue());
    jScrollPane3.setVisible(false);  //scrollpane associated with list
    txtSalesLedger.requestFocus(); //it is next field
}
4

1 回答 1

1

使用 aJComboBox而不是 a JTextField。你可以打电话JComboBox.setEditable( true ),然后JComboBox会有一个编辑器JTextField。正是你想要的,用户可以输入任何文本,而且列表框也可以用箭头图标打开。此外,您可以通过调用使列表自动出现JComboBox.showPopup()。如果您将焦点侦听器添加到 JComboBox 的编辑器文本字段,您还可以在用户单击文本字段时从那里显示弹出窗口。可以使用箭头图标关闭弹出列表。

这是一个示例代码:

final JComboBox comboBox = new JComboBox( 
    new Object[] { "", "Item #1", "Another item", "Something else" } );

comboBox.setEditable( true );

comboBox.getEditor().getEditorComponent().addFocusListener( new FocusAdapter() {
    @Override
    public void focusGained( final FocusEvent event ) {
        comboBox.showPopup();
    }
} );

注意:组合框的第一项是空字符串。我添加了这一点,以便组合框的编辑器文本字段最初不会显示任何值。当然,如果你想要一个初始值,你可以删除它。

于 2012-10-01T13:02:03.673 回答