如何在Swing控件中可视化焦点?

时间:2013-12-11 10:14:11

标签: java swing focus custom-controls

我有一些Swing控件,它没有显示它是否有焦点(实际上,这是PCanvas,但可能这没关系)。

现在我想让这个控件显示它是否聚焦。

我期待两种选择:

1)Swing中的任何控件都能显示焦点,但默认情况下此功能为OFF。然后如何打开它?

2)默认情况下,控件不显示焦点,那么怎么做?我可以覆盖paintBorder,但是我应该做些什么吗?

1 个答案:

答案 0 :(得分:1)

为此,您可以使用FocusListener例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Example extends JFrame {

    public Example() {
        JButton button = new JButton("btn");
        add(button,BorderLayout.WEST);
        JTextField field = new JTextField(5);
        field.addFocusListener(new FocusListener() {

            @Override
            public void focusGained(FocusEvent arg0) {
                ((JTextField)arg0.getComponent()).setBorder(BorderFactory.createLineBorder(Color.RED));
            }

            @Override
            public void focusLost(FocusEvent arg0) {
                ((JTextField)arg0.getComponent()).setBorder(null);
            }
        });

        add(field,BorderLayout.EAST);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }


    public static void main(String[] args) {
        new Example();
    }
}

enter image description here