2014-11-08 228 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