Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel中的Swing:keyBinding:执行的操作不执行Jlist_Java_Swing_Key Bindings - Fatal编程技术网

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(或其他任何人,
@
很重要)通知此人新的评论。