2014-11-08 195 views
0

我想制作一个框架,你必须输入你的名字和东西。我尝试使它像,名称:textfield,下一行,年龄:textfield等等......但文本字段真的很高。如果我在框架的一个面板中添加2个文本框,则一个文本框包含我的屏幕的一半。我试图用布局管理器来解决这个问题,但我不知道如何。java改变Textfield的大小

有人能帮我吗?

这里是我的代码:

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

class GUI{ 
    public static void main(String [] args){ 
     GUI g = new GUI(); 
     g.Start(); 
    } 

    public void Start(){ 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setSize(640, 640);    
     JPanel panel = new JPanel(); 
     JPanel west = new JPanel();   
     JLabel name = new JLabel("Name: "); 
     JLabel age = new JLabel("Age: ");   
     JTextField field1 = new JTextField(); 
     JTextField field2 = new JTextField();   
     west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS)); 
     west.add(name); 
     west.add(age);  
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
     panel.add(field1); 
     panel.add(field2);   
     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.getContentPane().add(BorderLayout.WEST, west); 
     frame.setVisible(true); 
    } 
} 

回答

3

BoxLayoutBorderLayout结合正在攻击你,可以考虑使用类似GridBagLayout代替。

看一看How to Use GridBagLayout更多细节

GridBagLayout

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class LayoutTest { 

    public static void main(String[] args) { 
     new LayoutTest(); 
    } 

    public LayoutTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JPanel form = new JPanel(new GridBagLayout()); 

       JLabel name = new JLabel("Name: "); 
     JLabel age = new JLabel("Age: "); 

     JTextField field1 = new JTextField(10); 
     JTextField field2 = new JTextField(3); 

       GridBagConstraints gbc = new GridBagConstraints(); 
       gbc.gridx = 0; 
       gbc.gridy = 0; 
       gbc.anchor = GridBagConstraints.WEST; 

       form.add(name, gbc); 
       gbc.gridy++; 
       form.add(age, gbc); 

       gbc.gridx++; 
       gbc.gridy = 0; 
       form.add(field1, gbc); 
       gbc.gridy++; 
       form.add(field2, gbc); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(form); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+0

oh,ok谢谢 – 2014-11-08 22:10:00

-1

不知道哪一个IDE你的工作,但是我知道,与Eclipse,windowbuilder亲有很大帮助的东西像这个。

你要找的是setBounds(x,y,width,height)。在GUI的对象上使用它。

x,y是相对于我们工作的窗口的对象的原点(0,0)的坐标。原点也位于窗口的左上角,并且距离它越远在x/y方向上,数字增加。与学校典型图形有一点不同。

下面是我的一个GUI中的一段代码,以此为例。

final TextField textField_1 = new TextField(); 
textField_1.setBounds(10, 231, 370, 22); 
panel.add(textField_1); 
+2

避免使用'null'布局,像素完美的布局是现代UI设计中的错觉。影响组件的个体大小的因素太多,其中没有一个可以控制。 Swing旨在与布局经理一起工作,放弃这些将导致无法结束的问题和问题,您将花费越来越多的时间来尝试纠正。看看[为什么在SWING中使用空布局皱起眉头?](http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null-布局在摆动)更多细节 – MadProgrammer 2014-11-08 22:13:58

+0

仅仅因为可能会皱眉,并不意味着它不值得了解。而且您可以编写代码来动态处理定位和大小调整,而无需使用预先制作的布局。如果Oracle不希望任何人使用它,它将被弃用。 – Kristoff 2014-11-08 22:20:45

+1

因此,不要使用布局管理器,而要编写布局管理器,这很有意义。在15年的专业发展过程中,我从未发现过我必须使用空布局管理器的情况,甚至编写了我自己的一个或两个版面管理器...... – MadProgrammer 2014-11-08 22:46:44