3

私はいくつかのカスタム プロパティを設定した JTextField を持っています。

nameField.setPreferredSize(new Dimension(275,40));
nameField.setBackground(bgColor);
nameField.setForeground(txtColor);
nameField.setFont(new Font("HelveticaNeue",Font.PLAIN,22));
nameField.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));

コンポーネントにフォーカスがある場合、フィールドの周囲にハイライトは表示されません。Mac では通常、青く光る長方形で、このコンポーネントにフォーカスがあることを示します。

nameField.setBorder(...) をコメントアウトすると、ハイライトが再び表示されます。ハイライトだけでなく、カスタムボーダーも保持するにはどうすればよいですか?

基本的に、コンポーネントにフォーカスがあるときはハイライト境界線を表示し、コンポーネントにフォーカスがないときは境界線を表示したくないだけです。

元のボーダーのタイプは であることに注意してくださいcom.apple.laf.AquaTextFieldBorder

4

2 に答える 2

2

基本的に、コンポーネントにフォーカスがあるときはハイライト境界線を表示し、コンポーネントにフォーカスがないときは境界線を表示したくないだけです。

FocusListener を使用する必要があります。まず、現在の Border を保存する必要があります。次に、focusLost で Border を null に設定し、focusGained で保存された Border を使用します。

または、UIManager を使用して、コンポーネントのデフォルトの境界線を取得できます。

于 2010-06-07T19:27:34.870 に答える
1

これは、CompoundBorder を使用して実行できる場合があります。

Nimbus のルック アンド フィールを備えた Windows では、問題を再現できます。次のコードを使用して、両方の境界線を表示できます。

  Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
  Border originalBorder = nameField.getBorder();
  CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
  nameField.setBorder(compoundBorder);
于 2010-06-07T19:28:48.780 に答える