2012-05-08 15 views
6

私はJTextFieldを持っていますが、私はマージンを設定します。しかし、境界線を設定すると、正しく機能しません。マージン機能が動作しません。 これは私のコードです。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); 
    } 
} 

私はこの行をcommant場合、それは

//textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
+0

をし、それが自分の設定とほぼ同じ印象を与える:

このような何か作業をする必要があります余裕のあるもの:-) –

答えて

5

JavaDocからそれを読んで動作します。

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

おそらく化合物の国境を探しています:

BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY), 
       BorderFactory.createEmptyBorder(0, 20, 0, 0)); 
15

マージンが問題を回避するためにボーダーを持ついくつかの問題を、持っているあなたは、内側の境界線と希望ボーダーとしてEmptyBorderを設定CompoundBorderを使用して試すことができます(あなたの場合はlineBorder)を外側の境界として使用します。あなたはそれで1つの空のボーダーを指定することができますので、それは国境は、設定に来るとき、私は、この化合物の国境のブツを愛する

Border line = BorderFactory.createLineBorder(Color.DARK_GRAY); 
Border empty = new EmptyBorder(0, 20, 0, 0); 
CompoundBorder border = new CompoundBorder(line, empty); 
textField.setBorder(border); 
+0

素晴らしい。できます。すべての答えにたくさん感謝します。 – querman

関連する問題