Java JPanel中的Swing:keyBinding:执行的操作不执行Jlist
我正在尝试构建一个建议Java JPanel中的Swing:keyBinding:执行的操作不执行Jlist,java,swing,key-bindings,Java,Swing,Key Bindings,我正在尝试构建一个建议JList,当用户在JPanel中的JTextField框中键入某些键(如e或a或p等)时,该建议就可见了。 我尝试使用击键来实现这一点,并在actionPerformed中放置JList。在Jlist之前,我有一个System.out语句“E按下” 我的问题是按下E键,控制台打印“E按下”。但是,Jlist没有出现 public snippet() { contentPane = new JPanel(); contentPane.setBor
JList
,当用户在JPanel
中的JTextField
框中键入某些键(如e
或a
或p
等)时,该建议就可见了。
我尝试使用击键来实现这一点,并在actionPerformed
中放置JList
。在Jlist
之前,我有一个System.out语句“E按下”
我的问题是按下E键,控制台打印“E按下”。但是,Jlist
没有出现
public snippet() {
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.setFocusable(true);
contentPane.requestFocusInWindow();
KeyStroke stroke = KeyStroke.getKeyStroke("E");
JTextField textfield = new JTextField();
textfield.setFocusable(true);
textfield.requestFocusInWindow();
textfield.setBounds(86, 94, 1003, 38);
textfield.setToolTipText("Please enter the query.");
Action a = new AbstractAction(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Got an E");
JList list = new JList(query);
list.setFont(new Font("Times New Roman", Font.BOLD, 25));
list.getBorder();
list.setBounds(84, 212, 366, 155);
list.setVisible(true);
list.setFocusable(true);
contentPane.add(list);
}
};
InputMap inputMap = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, "OPEN");
contentPane.getActionMap().put("OPEN", a);
}
非常感谢任何形式的帮助。我知道当console打印SYS out语句时,KeyBinding正在工作,但我不明白为什么Jlist没有出现
谢谢。1)Java GUI可能需要在多种平台上、不同的屏幕分辨率和不同的PLAF上工作。因此,它们不利于部件的精确放置。要为一个健壮的GUI组织组件,请改为使用布局管理器,或与布局填充和边框一起使用。。。。2) 对于一个空间中的多个组件,请使用如图所示的。3) 为了更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。4) 可能最好在启动时添加列表,并在执行操作时调整模型(例如填充)。为什么有2个
requestFocusInWindow()
语句。首先,该方法仅适用于显示在可见GUI上的组件。仅创建组件时,它不起作用。其次,你不能一次专注于两个组件,为什么还要尝试呢?默认情况下,大多数组件都是可聚焦的,因此不需要使用setFocusable(true)。面板不可聚焦,但这并不重要,因为您使用的是键绑定。此外,Swing组件(顶层容器除外)在默认情况下是可见的,因此不需要setVisible(true)。getBorder()语句的目的是什么?感谢您的回复。我将尝试cardLayout示例。我知道很少有不必要的焦点语句。我将删除这些语句。getBorder我正在尝试查看数据填充是否有问题,或者border是否至少显示了一个空列表。“感谢您的回复。”提示:添加@camickr(或其他任何人,@
很重要)通知此人新的评论。