web-dev-qa-db-ja.com

Swing JTextFieldでボーダーを削除する方法は?

とにかくJTextFieldの境界線を削除する方法はありますか?

txt = new JTextField();
txt.setBorder(null);   // <-- this has no effect.

私は本当にJLabelのように見せたいです-しかし、人々がそれを強調表示できるようにしたいので、私はそれをJTextFieldにする必要があります。

20
Markus V.

以前の回答 質問 から、一部のPL&Fが国境を壊す可能性があることがわかります。

したがって、明白な解決策は、PL&Fが呼び出しているsetBorderメソッドをオーバーライドして、変更を破棄することです。

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};
17
JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());

http://Java.Sun.com/javase/6/docs/api/javax/swing/BorderFactory.html

ボーダーを「null」に設定する場合、ルックアンドフィールには、オペレーティングシステムの(存在する場合)ネイティブのボーダースタイルを使用するように指示しています。

60
Björn

NullではなくBorderFactory.createEmptyBorder()に設定してみてください。 nullに設定すると実際には異なる意味を持つため、これは「トリックを実行する」ことがあります。

それが機能しない場合は、使用しているルックアンドフィールが何かを上書きしている可能性があります。デフォルトまたは何かカスタムを使用していますか?

3
Uri

いいえ、境界線を削除することはできません。特にAWTコンポーネントの表示について。ネイティブウィジェットセットを使用します(Javaの外部で描画されます)。

背景に似た線を作ってみてください。たとえば、背景が白の場合、次のことを行う必要があります。

setBorder(BorderFactory.createLineBorder(Color.white));

次に、背景を白に設定します。

setBackground(Color.white);
2
stuklist
txt.setBorder(new LineBorder(Color.BLACK,0));

うまくいくかもしれません。

1
gerardw