5

FlowLayoutレイアウトマネージャーを使用するたびにテキストフィールドがスリットとして表示される理由を誰かに説明してもらえますか。

私はしばらくの間この問題に頭をぶつけてきました、そして私はそれがなぜうまくいかないのか理解できないようです。

何度も見落としているのは簡単なことだと感じますので、誰かがこの現象を説明してくれたら、いつまでもありがたいです。

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class Console
{   
    public Console()
    {
        makeConsole();
    }

    private void makeConsole()
    {
        JFrame console = new JFrame("ArchiveConsole");
        Container base  = console.getContentPane();
        base.setSize(400, 250);
        console.setSize(base.getSize());
        base.setLayout(new FlowLayout(FlowLayout.CENTER, 5,5));

        JTextField tf = new JTextField();
        tf.setSize(base.getWidth(), 25);
        base.add(tf);

        console.setVisible(true);
    }
}
4

4 に答える 4

10

Swing レイアウト マネージャーのチュートリアルから

FlowLayout クラスは、コンポーネントを適切なサイズに並べて配置します。コンテナー内の水平方向のスペースが小さすぎてすべてのコンポーネントを 1 行に配置できない場合、FlowLayout クラスは複数の行を使用します。コンポーネントの行に対してコンテナが必要以上に広い場合、行はデフォルトでコンテナ内の水平方向の中央に配置されます。

したがって、できればsetColumnsメソッドを使用して、テキストフィールドの適切なサイズを調整する必要があります。

テキストフィールドを幅全体に広げたい場合は、別のレイアウトを使用したい場合があることに注意してくださいFlowLayout

たとえば、次のコードは見栄えJTextFieldが良いですが、列の数をハードコーディングしました

import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;

public class TextFieldWithFlowLayout {
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame console = new JFrame("ArchiveConsole");
        Container base  = console.getContentPane();
        base.setLayout(new FlowLayout( FlowLayout.CENTER, 5,5));

        JTextField tf = new JTextField();
        tf.setColumns( 20 );
        base.add(tf);
        console.pack();
        console.setVisible(true);
      }
    } );
  }
}
于 2012-05-11T10:36:39.887 に答える
1

使用: JTextField tf = new JTextField(25);

代わりに: JTextField tf = new JTextField(); tf.setSize(base.getWidth(), 25);

于 2012-05-11T10:36:49.607 に答える
1

LayoutManagers を使用する場合、サイズと位置を手動で設定しようとしないでください。LayoutManager の機能と競合しています。Layoutmanagers は、制約と優先/最小/最大サイズに基づいて、コンポーネントのサイズと配置を行います。ほとんどの Swing コンポーネントはこれを自動的に処理するため、通常は優先サイズを強制するべきではありません。

JTextField については、テキストが含まれていないため、推奨されるサイズはほとんどありません。setColumnsを使用して preferredSizeを示すか、setPreferredSize を呼び出します

于 2012-05-11T10:38:26.457 に答える