2012-05-17 5 views
0

У меня есть текстовые поля и ярлыки, нажимая кнопку «Добавить». Я дал x и y координаты, но текстовое поле появляется неправильно. как исправить? а также как увеличить ширину текстового поля ???java: динамически сгенерированное текстовое поле, нажав на кнопку

import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.LineBorder; 

public class SS 
{ 
// Field members 
static JPanel panel = new JPanel(); 
static Integer indexer = 1; 
static List<JLabel> listOfLabels = new ArrayList<JLabel>(); 
static List<JTextField> listOfTextFields = new ArrayList<JTextField>(); 

public static void main(String[] args) 
{  
    // Construct frame 
    JFrame frame = new JFrame(); 
    frame.setLayout(new GridBagLayout()); 
    frame.setPreferredSize(new Dimension(800, 800)); 
    frame.setTitle("My Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Frame constraints 
    GridBagConstraints frameConstraints = new GridBagConstraints(); 

    // Construct button 
    JButton addButton = new JButton("Add"); 
    addButton.addActionListener(new ButtonListener()); 

    // Add button to frame 
    frameConstraints.gridx = 0; 
    frameConstraints.gridy = 0; 
    frame.add(addButton, frameConstraints); 

    // Construct panel 
    panel.setPreferredSize(new Dimension(400, 400)); 
    panel.setLayout(new GridBagLayout()); 
    panel.setBorder(LineBorder.createBlackLineBorder()); 

    // Add panel to frame 
    frameConstraints.gridx = 0; 
    frameConstraints.gridy = 1; 
    frameConstraints.weighty = 20; 
    frame.add(panel, frameConstraints); 

    // Pack frame 
    frame.pack(); 

    // Make frame visible 
    frame.setVisible(true); 
} 

static class ButtonListener implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent arg0) 
    {  
     // Clear panel 
     panel.removeAll(); 

     // Create label and text field 
     listOfTextFields.add(new JTextField()); 
     listOfLabels.add(new JLabel("Name " + indexer)); 

     // Create constraints 
     GridBagConstraints textFieldConstraints = new GridBagConstraints(); 
     GridBagConstraints labelConstraints = new GridBagConstraints(); 

     // Add labels and text fields 
     for(int i = 0; i < indexer; i++) 
     { 
      // Text field constraints 
      textFieldConstraints.gridx = 20; 
      textFieldConstraints.gridy = i; 

      // Label constraints 
      labelConstraints.gridx = 1; 
      labelConstraints.gridy = i; 

      // Add them to panel 
      panel.add(listOfTextFields.get(i), textFieldConstraints); 
      panel.add(listOfLabels.get(i), labelConstraints); 
     } 

     // Align components top-to-bottom 
     GridBagConstraints c = new GridBagConstraints(); 
     c.gridx = 0; 
     c.gridy = indexer; 
     c.weighty = 1; 
     panel.add(new JLabel(), c); 

     // Increment indexer 
     indexer++; 
    } 
} 

}

+0

[что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

Я пытаюсь создать текстовое поле dyanamically, нажав на кнопку , –

+0

Ширина может быть задана с помощью метода setSize. – Buffalo

ответ

3

Чтобы получить рамку для обновления с текстовым полем необходимо вызвать блок в нижней части actionPerformed методы.

frame.pack(); 

Для этого вам необходимо иметь фрейм как переменную класса.

static JFrame frame; 

Для размера макета мешок сетка будет переопределять SetSize, так что вы можете дать ему вес и сделать его растянуть, чтобы заполнить пространство. Это может произойти сразу после того, как ваши другие вызовы textFieldContraints.

textFieldConstraints.weightx = 1; 
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL; 

Это должно привести к появлению текстовых полей при нажатии кнопки и снятии коробки.

0

Увеличить ширину текстового поля.

listOfTextFields.add(new JTextField(null,10)); 
Смежные вопросы