0
我有一些Swing控件,不顯示它是否有焦點(實際上,這是PCanvas
,但可能這並不重要)。如何在Swing控件中顯示焦點?
現在我想讓這個控件顯示它是否被聚焦。
我想到兩個選擇:
1)在Swing任何控制能夠顯示焦點,不過這個功能是默認關閉。那麼如何打開它?
2)控件默認不顯示焦點,那該怎麼做?我可以覆蓋paintBorder
,但是我應該採取其他措施嗎?
我有一些Swing控件,不顯示它是否有焦點(實際上,這是PCanvas
,但可能這並不重要)。如何在Swing控件中顯示焦點?
現在我想讓這個控件顯示它是否被聚焦。
我想到兩個選擇:
1)在Swing任何控制能夠顯示焦點,不過這個功能是默認關閉。那麼如何打開它?
2)控件默認不顯示焦點,那該怎麼做?我可以覆蓋paintBorder
,但是我應該採取其他措施嗎?
爲了這個目的,你可以使用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();
}
}
一)沒有沒有默認的行爲,這取決於具體的UI委託方B)不覆蓋的paintBorder - 而是使用focusListener並根據焦點狀態設置邊框 – kleopatra