我需要一些帮助才能实现focuslistener
。我的代码无效,因为没有注册焦点。
以下是我的申请图片:
当用户在textBox中键入一些名称时,将搜索列表以查找匹配项,并将结果显示为自动完成的文本字段。
显示的自动填充框只是一个简单的JPanel,其中每个名称都是JPanel。我希望能够选择具有焦点的特定项目。
我该怎么做?
请注意,我不允许使用JTextField或JLabel,这就是我在JPanel上手动绘制字符串的原因。
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");
}
}
}