2014-11-11 2 views
0

Я хочу создать 3 JTextFields в строке со всеми равными размерами. Но мое первое текстовое поле становится таким большим, чем два других.
После добавления каждого компонента за раз и выяснения причин проблемы я понял, что если я наберу длинный текст для JLabel, когда возникает эта проблема. Если я уменьшу длину текста в JLabel JTextFields, вы получите размеры I want.Here мой кодИзменения размера JTextField с длиной текста JLabel

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.lang.Math; 
public class Calculator1 extends JFrame { 

JTextField value1=new JTextField("0"); 
JTextField value2=new JTextField("0"); 
JTextField value3=new JTextField("0"); 
JLabel label1=new JLabel("Label1 size of JTextfields chnge with Label length"); 
JTextField value4=new JTextField("0"); 
JTextField value5=new JTextField("0"); 
JTextField value6=new JTextField("0"); 
JLabel label2=new JLabel("Label2"); 
JLabel label3=new JLabel("Label3"); 
JTextField value7=new JTextField("0"); 
public Calculator1(){ 

    super("Calculator"); 

    setSize(500,200); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel=new JPanel(); 
    GridBagLayout bag=new GridBagLayout(); 
    getContentPane().add(panel); 
    panel.setLayout(bag); 
    GridBagConstraints c=new GridBagConstraints(); 

    c.insets=new Insets(5,5,5,5); 
    c.fill=GridBagConstraints.HORIZONTAL; 


    c.gridx=0; 
    c.gridy=0; 
    c.weightx=0.0; 
    c.weighty=0.5; 
    c.gridwidth=1; 
    panel.add(label1,c); 


    c.gridx=0; 
    c.gridy=1; 
    c.gridwidth=5; 
    c.weightx=0.5; 
    c.weighty=0.5; 
    panel.add(value1,c); 


    c.gridx=5; 
    c.gridy=1; 
    panel.add(value2,c); 


    c.gridx=10; 
    c.gridy=1; 
    panel.add(value3,c); 

    c.gridwidth=1; 
    c.weightx=0.0; 
    c.weighty=0.5; 
    c.gridx=0; 
    c.gridy=3; 
    panel.add(label2,c); 

    c.gridwidth=5; 
    c.weightx=0.5; 
    c.weighty=0.5; 
    c.gridx=0; 
    c.gridy=4; 
    c.insets=new Insets(5,5,5,5); 
    panel.add(value4,c); 


    c.gridx=5; 
    c.gridy=4; 
    panel.add(value5,c); 


    c.gridx=10; 
    c.gridy=4; 
    panel.add(value6,c); 

    c.gridwidth=1; 
    c.weightx=0.0; 
    c.weighty=0.5; 
    c.gridx=0; 
    c.gridy=5; 
    panel.add(label3,c); 

    c.gridwidth=5; 
    c.weightx=0.5; 
    c.weighty=0.5; 
    c.gridx=0; 
    c.gridy=6; 
    panel.add(value7,c); 


    setVisible(true); 
} 
public static void main (String args[]){ 
    Calculator1 cal=new Calculator1(); 
} 

}

Как я могу остановить изменение размера текстовых полей JTextField при изменении JLabel label1 в длину текста

ответ

2

Набор gridwidth = 3 для JLabel-х и 1 для JTextField-х, как следующая:

public Calculator() { 

    super("Calculator"); 

    setSize(500, 200); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel = new JPanel(); 
    GridBagLayout bag = new GridBagLayout(); 
    getContentPane().add(panel); 
    panel.setLayout(bag); 
    GridBagConstraints c = new GridBagConstraints(); 

    c.insets = new Insets(5, 5, 5, 5); 
    c.fill = GridBagConstraints.HORIZONTAL; 

    c.gridx = 0; 
    c.gridy = 0; 
    c.weightx = 0.0; 
    c.weighty = 0.5; 
    c.gridwidth = 3; 
    panel.add(label1, c); 

    c.gridx = 0; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    c.weightx = 0.5; 
    c.weighty = 0.5; 
    panel.add(value1, c); 

    c.gridx = 1; 
    c.gridy = 1; 
    panel.add(value2, c); 

    c.gridx = 2; 
    c.gridy = 1; 
    panel.add(value3, c); 

    c.gridwidth = 3; 
    c.weightx = 0.0; 
    c.weighty = 0.5; 
    c.gridx = 0; 
    c.gridy = 3; 
    panel.add(label2, c); 

    c.gridwidth = 1; 
    c.weightx = 0.5; 
    c.weighty = 0.5; 
    c.gridx = 0; 
    c.gridy = 4; 
    c.insets = new Insets(5, 5, 5, 5); 
    panel.add(value4, c); 

    c.gridx = 1; 
    c.gridy = 4; 
    panel.add(value5, c); 

    c.gridx = 2; 
    c.gridy = 4; 
    panel.add(value6, c); 

    c.gridwidth = 3; 
    c.weightx = 0.0; 
    c.weighty = 0.5; 
    c.gridx = 0; 
    c.gridy = 5; 
    panel.add(label3, c); 

    c.gridwidth = 1; 
    c.weightx = 0.5; 
    c.weighty = 0.5; 
    c.gridx = 0; 
    c.gridy = 6; 
    panel.add(value7, c); 

    setVisible(true); 
} 

enter image description here

Также читайте учебник для GridBagLayout

+0

Спасибо за ответ . Он решил проблему. В книге Сэмов говорится, что ширина сетки - это количество ячеек, которые занимает компонент в горизонтальном направлении. Я хотел бы знать, насколько велика ячейка. –

+0

Ячейка размером с размер компонента в ячейке, но никогда не устанавливайте ее вручную, это цель 'LayoutManager'. Кроме того, размеры компонентов, управляемых 'LayoutManager' – alex2410

0

использование макета сетки. он автоматически сделает все равными, если вы не предоставляете размер. напр:

setLayout(new GridLayout(rows,cols,vgap, hagap)) 
Смежные вопросы