9

私はJTextFieldマージンを設定したいと思っています。しかし、境界線を設定すると、正しく機能しません。マージン機能が働きません。これは私のコードです。

import java.awt.Color;
import java.awt.Insets;
import java.io.IOException;

import javax.swing.BorderFactory;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class ImageField {

public static void main(String[] args) throws IOException {

    JTextField textField = new JTextField();
    textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
    textField.setMargin(new Insets(0, 20, 0, 0));
    JOptionPane.showMessageDialog(null, textField, "",
            JOptionPane.PLAIN_MESSAGE);
    }
}

この行をコマンドすると、機能します

 //textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
4

2 に答える 2

19

Margin は Border に問題があります。この問題を回避するには、CompoundBorderを使用して、EmptyBorder を内側の境界線として設定し、目的の境界線 (この場合は lineBorder) を外側の境界線として設定してみてください。

このようなものが動作するはずです:

Border line = BorderFactory.createLineBorder(Color.DARK_GRAY);
Border empty = new EmptyBorder(0, 20, 0, 0);
CompoundBorder border = new CompoundBorder(line, empty);
textField.setBorder(border);
于 2012-05-08T10:38:48.240 に答える
6

JavaDocから読んでください。

テキスト コンポーネントの境界線とそのテキストの間のマージン スペースを設定します。テキスト コンポーネントのデフォルトの Border オブジェクトは、この値を使用して適切な余白を作成します。ただし、デフォルト以外の境界線がテキスト コンポーネントに設定されている場合、適切なマージン スペースを作成するのはその Border オブジェクトの責任です (そうでない場合、このプロパティは事実上無視されます)。これにより、コンポーネントが再描画されます。PropertyChange イベント (「マージン」) がすべてのリスナーに送信されます。

あなたはおそらく複合ボーダーを探しています:

BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
                BorderFactory.createEmptyBorder(0, 20, 0, 0));
于 2012-05-08T10:34:26.323 に答える