2013-11-01 22 views
0

我想要的單元格間距是使第一文本框更接近第一個JLabel,第一文本框和第二個JLabel,這樣之間的一些空間:控制研究來自其他小區的GridBagLayout

的JLabel:JTextField的 - - (spaceeee)----------的JLabel:JTextField中

,但一切都改變我附近我想要的東西沒有得到,看:

enter image description here

我的代碼,添加TFields和Jlabels:

JLabel lblProtocolo = new JLabel("Protocolo:"); 
    JLabel lblDataEntrada = new JLabel("Data Entrada:"); 
    JTextField tfProtocolo = new JTextField(10); 
    JTextField tfDataEntrada = new JTextField(10); 
    JTextField soteste = new JTextField(10); 
    JLabel soocupa = new JLabel(); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.weightx = 1; 
    gbc.weighty = 1; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.insets = new Insets(10, 10, 10, 10); 
    gbc.anchor = GridBagConstraints.NORTHWEST; 
    panel2DistribuidorDistribuir.add(lblProtocolo,gbc); 
gbc.gridx = 1; 
    panel2DistribuidorDistribuir.add(tfProtocolo,gbc); 

gbc.gridx = 2; 
    panel2DistribuidorDistribuir.add(lblDataEntrada,gbc); 

gbc.gridx = 3; 
    panel2DistribuidorDistribuir.add(tfDataEntrada,gbc); 

我知道如果在gridx = 4中添加一些隱形的jtextfield;然後將這個新jtextfield的權重設置爲1,其他設置爲0,它將「工作」,但gridx = 0,1,2,3中的組件不會自動調整大小=(任何線索

回答

3

gbc.weightx = 1;基本上是說分量要佔可用空間的100%。

我會做的是開始刪除它...

你還可以玩玩gbc.insets以實現各個組件之間的距離......

看看How to Use GridBagLayout更多細節

更新與例如

enter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
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 GridBagLayoutTest100 { 

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

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

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

    public class TestPane extends JPanel { 

     public TestPane() { 
      JLabel lblProtocolo = new JLabel("Protocolo:"); 
      JLabel lblDataEntrada = new JLabel("Data Entrada:"); 
      JTextField tfProtocolo = new JTextField(10); 
      JTextField tfDataEntrada = new JTextField(10); 

      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      gbc.insets = new Insets(4, 4, 4, 4); 
      gbc.anchor = GridBagConstraints.WEST; 

      add(lblProtocolo, gbc); 
      gbc.gridx++; 
      gbc.weightx = 1; 
      add(tfProtocolo, gbc); 

      gbc.anchor = GridBagConstraints.EAST; 
      gbc.gridx++; 
      add(lblDataEntrada, gbc); 
      gbc.gridx++; 
      gbc.weightx = 0; 
      add(tfDataEntrada, gbc);    
     } 
    } 
} 
+0

不可能,如果我刪除gbc.weightx = 1;一切都去了中心,而不是resizable ....你會如何建議gbc.insets,因爲insets有更多的影響,當我添加一切在同一個網格和格子和比我設置每個元素的空間,但這將很多工作,如果我有很多組件 – user2582318

+0

首先,約束可以共享... – MadProgrammer

+0

但我使用共享約束,buttt 我解決了它簡單添加weightx = 0;對於JLabels和Weightx = 1;對於TextFields,我不知道這是否更好,但工作 – user2582318

1

添加您的組件,將其具有的GridBagConstraints GridBagLayout中,你可以定義插圖時定義GridBagConstraints.A示例代碼如下

 GridBagLayout gridBagLayout = new GridBagLayout(); 
     gridBagLayout.columnWidths = new int[]{0, 0, 155, 0, 0}; 
     gridBagLayout.rowHeights = new int[]{94, 0, 0}; 
     gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE}; 
     gridBagLayout.rowWeights = new double[]{1.0, 1.0, Double.MIN_VALUE}; 
     setLayout(gridBagLayout); 



     JTextArea textArea = new JTextArea(); 
     textArea.setLineWrap(true); 
     GridBagConstraints gbc_textArea = new GridBagConstraints(); 
     gbc_textArea.insets = new Insets(0, 0, 5, 15); 
     gbc_textArea.fill = GridBagConstraints.BOTH; 
     gbc_textArea.gridx = 2; 
     gbc_textArea.gridy = 0; 
     add(textArea, gbc_textArea); 
+0

感謝回答,只是工作了第一個JLabel,一是文本字段,第二個JLabel,最後JTextField中只有他擴大,並有從第二個JLabel =的距離( – user2582318

0

它已經很晚了,但我發佈了這個技巧,它可以像你想要的那樣工作:

public static void main(String[] args) { 
    JLabel lblProtocolo = new JLabel("Protocolo:"); 
    JLabel lblDataEntrada = new JLabel("Data Entrada:"); 
    JTextField tfProtocolo = new JTextField(10); 
    JTextField tfDataEntrada = new JTextField(10); 
    JTextField soteste = new JTextField(10); 

    JFrame f = new JFrame(); 

    f.getContentPane().setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 
    c.insets = new Insets(5, 5, 5, 5); 
    c.anchor = GridBagConstraints.WEST; 
    f.getContentPane().add(lblProtocolo,c); 

    c.gridx = 1; 
    c.weightx = 1; 
    c.fill = GridBagConstraints.HORIZONTAL; 
    f.getContentPane().add(tfProtocolo,c); 

    c.anchor = GridBagConstraints.EAST; 
    c.gridx = 4; 
    f.getContentPane().add(tfDataEntrada,c); 

    c.gridx = 2; 
    c.gridwidth = 2; 
    c.weightx = 1; 
    lblDataEntrada.setHorizontalAlignment(JLabel.RIGHT); 
    f.getContentPane().add(lblDataEntrada,c); 


    f.pack(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setVisible(true); 
} 

例子: enter image description here