JComponent FocusListener

时间:2013-11-25 16:29:37

标签: java swing jpanel listener focuslistener

我需要一些帮助才能实现focuslistener。我的代码无效,因为没有注册焦点。

以下是我的申请图片:

当用户在textBox中键入一些名称时,将搜索列表以查找匹配项,并将结果显示为自动完成的文本字段。

显示的自动填充框只是一个简单的JPanel,其中每个名称都是JPanel。我希望能够选择具有焦点的特定项目。

我该怎么做?

请注意,我不允许使用JTextField或JLabel,这就是我在JPanel上手动绘制字符串的原因。

Example image

public class ListComponent extends JPanel{

    private List<String> l;

    public ListComponent(){
        super();
        this.setBackground(Color.white);
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.setVisible(true);
        this.validate();
    }

    public void drawText(final List<String> list){

        this.removeAll();

        for(int i = 0; i<=list.size()-1; i++){
             listItem item = new listItem(list.get(i).toString()); 
             item.setPreferredSize(new Dimension(150, 25));
             Border line = BorderFactory.createLineBorder(Color.gray);
             item.setBorder(line); 
             this.add(item); 
             this.validate();
        }
    }

   private class listItem extends JComponent implements FocusListener  {

       String str; 

       public listItem(String s){
           super(); 
           this.setBackground(Color.white); 
           this.setPreferredSize(new Dimension(200, 200));
           str = s;
           this.setFocusable(true);
           this.addFocusListener(this);
       }

       @Override
       protected void paintComponent(Graphics g){
          super.paintComponent(g);
          g.drawString(str, 5, 15);
       }

       @Override
       public void focusGained(FocusEvent e) {
           System.out.println("focusGained"); 
       }

       @Override
       public void focusLost(FocusEvent e) {
           System.out.println("focusLost");
       }   
   }
}

0 个答案:

没有答案