12

JTextField を幅いっぱいにして高さを設定しようとしましたが、それでも失敗しました。コードを追加しようとしましたsetPreferredSize(new Dimension(320,200));が、それでも失敗しました。JTextField の幅をいっぱいにし、高さを 200 程度に設定する方法はありますか?

4

8 に答える 8

26

高さで遊んではいけません。使用するフォントに基づいて、テキスト フィールドで高さを決定します。

テキストフィールドの幅を制御したい場合は、使用できます

textField.setColumns(...);

テキストフィールドが適切な幅を決定できるようにします。

または、幅を親パネルの幅全体にしたい場合は、適切なレイアウトを使用する必要があります。おそらく、BorderLayout の NORTH です。

詳細については、レイアウト マネージャーに関する Swing チュートリアルを参照してください。

于 2013-02-11T02:40:54.563 に答える
6

高さを 200 に設定します

Fontを大きなバリアント (150 ピクセル以上) に設定します。既に述べたように、列を使用して幅を制御し、好みの幅と高さを尊重するレイアウト マネージャー (または制約) を使用します。

大きなテキスト フィールド

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class BigTextField {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                // the GUI as seen by the user (without frame)
                JPanel gui = new JPanel(new FlowLayout(5));
                gui.setBorder(new EmptyBorder(2, 3, 2, 3));

                // Create big text fields & add them to the GUI
                String s = "Hello!";
                JTextField tf1 = new JTextField(s, 1);
                Font bigFont = tf1.getFont().deriveFont(Font.PLAIN, 150f);
                tf1.setFont(bigFont);
                gui.add(tf1);

                JTextField tf2 = new JTextField(s, 2);
                tf2.setFont(bigFont);
                gui.add(tf2);

                JTextField tf3 = new JTextField(s, 3);
                tf3.setFont(bigFont);
                gui.add(tf3);

                gui.setBackground(Color.WHITE);

                JFrame f = new JFrame("Big Text Fields");
                f.add(gui);
                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}
于 2013-02-11T05:04:04.220 に答える
3

There's a way which maybe not perfect, but can meet your requirement. The main point here is use a special dimension to restrict the height. But at the same time, width actually is free, as the max width is big enough.

package test;
import java.awt.*;
import javax.swing.*;

public final class TestFrame extends Frame{
    public TestFrame(){
        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
        p.setPreferredSize(new Dimension(500, 200));
        p.setMaximumSize(new Dimension(10000, 200));
        p.add(new JLabel("TEST: "));

        JPanel p1 = new JPanel();
        p1.setLayout(new BoxLayout(p1, BoxLayout.X_AXIS));
        p1.setMaximumSize(new Dimension(10000, 200));
        p1.add(new JTextField(50));

        p.add(p1);

        this.setLayout(new BorderLayout());
        this.add(p, BorderLayout.CENTER);
    }
    //TODO: GUI CREATE
}
于 2014-01-15T16:32:29.363 に答える
1
     f.setLayout(null);

上記の行を追加します(fJFrame またはJTestFieldを追加した コンテナーです)

しかし、Javaで「LayoutManager」を学んでみてください。チュートリアルのリンクについては、他の回答を参照してください。または、このhttp://docs.oracle.com/javase/tutorial/uiswing/layout/visual.htmlを試してください。

于 2013-02-11T06:08:01.920 に答える
0

JTextField を追加するパネルに使用している LayoutManager のタイプは何ですか?

さまざまなレイアウト マネージャーがさまざまな方法で要素のサイズ変更に取り組みます。SetPreferredSize() を尊重する人もいれば、コンテナーに合わせてコンポーネントをスケーリングする人もいます。

参照: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

ps。これはEclipse、そのJavaとは何の関係もありません。

于 2013-02-11T02:40:28.073 に答える
0
package myguo;
import javax.swing.*;

public class MyGuo {

    JFrame f;
    JButton bt1 , bt2 ;
    JTextField t1,t2;
    JLabel l1,l2;

    MyGuo(){

        f=new JFrame("LOG IN FORM");
        f.setLocation(500,300);
        f.setSize(600,500);
        f.setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        l1=new JLabel("NAME");
        l1.setBounds(50,70,80,30);

        l2=new JLabel("PASSWORD");
        l2.setBounds(50,100,80,30);

        t1=new JTextField();
        t1.setBounds(140, 70, 200,30);

         t2=new JTextField();
        t2.setBounds(140, 110, 200,30);

        bt1 =new JButton("LOG IN");
        bt1.setBounds(150,150,80,30);

        bt2 =new JButton("CLEAR");
        bt2.setBounds(235,150,80,30);

         f.add(l1);
        f.add(l2);
         f.add(t1);
         f.add(t2);
         f.add(bt1);
         f.add(bt2);

    f.setVisible(true);

    }
    public static void main(String[] args) {
        MyGuo myGuo = new MyGuo();
}
}
于 2016-06-28T18:51:55.527 に答える
-1

setBounds は BorderLayout でのみ機能します。フレーム、コンテナ、またはパネルに BorderLayout を使用し、setBounds を使用してテキスト フィールドの幅と高さを設定します。このコードを参照 シンプルなコード

 import java.awt.*;
 import javax.swing.*;

   class uni1
   {
     public static void main(String[] args)
{
    JFrame frm = new JFrame();
    TextField txt = new TextField();
    txt.setBounds(0, 0, 1200, 400);
    frm.add(txt,BorderLayout.NORTH);
    frm.setLayout(new BorderLayout());
    frm.setVisible(true);
    frm.setDefaultCloseOperation(frm.EXIT_ON_CLOSE);
}

}

于 2021-07-20T17:00:11.830 に答える