JTextField を幅いっぱいにして高さを設定しようとしましたが、それでも失敗しました。コードを追加しようとしましたsetPreferredSize(new Dimension(320,200));
が、それでも失敗しました。JTextField の幅をいっぱいにし、高さを 200 程度に設定する方法はありますか?
8 に答える
高さで遊んではいけません。使用するフォントに基づいて、テキスト フィールドで高さを決定します。
テキストフィールドの幅を制御したい場合は、使用できます
textField.setColumns(...);
テキストフィールドが適切な幅を決定できるようにします。
または、幅を親パネルの幅全体にしたい場合は、適切なレイアウトを使用する必要があります。おそらく、BorderLayout の NORTH です。
詳細については、レイアウト マネージャーに関する Swing チュートリアルを参照してください。
高さを 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);
}
}
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
}
f.setLayout(null);
上記の行を追加します(fは JFrame またはJTestFieldを追加した コンテナーです)
しかし、Javaで「LayoutManager」を学んでみてください。チュートリアルのリンクについては、他の回答を参照してください。または、このhttp://docs.oracle.com/javase/tutorial/uiswing/layout/visual.htmlを試してください。
JTextField を追加するパネルに使用している LayoutManager のタイプは何ですか?
さまざまなレイアウト マネージャーがさまざまな方法で要素のサイズ変更に取り組みます。SetPreferredSize() を尊重する人もいれば、コンテナーに合わせてコンポーネントをスケーリングする人もいます。
参照: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
ps。これはEclipse、そのJavaとは何の関係もありません。
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();
}
}
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);
}
}