2013-05-16 3 views
2

Я начинаю на Java GUI. Я пишу программу, которая вычисляет обратную для данной матрицы. Для этого сначала нужно сканировать матрицу. Я решил отсканировать матрицу следующим образом:Динамически создавать JTextField в цикле

enter image description here

Сначала я прошу пользователь подсчет строки или столбца квадратной матрицы. Когда пользователь вводит номер и нажимает кнопку Tamam, я хочу создать немного NxN JTextField.

Таким образом, пользователь сможет легко вводить каждый элемент матрицы. Я хочу спросить: я не могу создать NxN JTextField. Мой код:

private void jButtonRowCntMouseClicked(java.awt.event.MouseEvent evt) {           
     int i,j; 
     if(jTextFieldRowCnt.getText() != null){ 
      String cnt = jTextFieldRowCnt.getText(); 
      Integer rowCnt = Integer.parseInt(cnt);      
      for(i=0;i<rowCnt;i++){ 
       for(j=0;j<rowCnt;j++){ 
         JTextField textField = new JTextField(); 
         this.add(textField); 
         pack(); 
       } 
      } 
     } 
    } 

Но, к сожалению, я не мог этого сделать. Где я иду не так?

Мой другой вопрос: как я могу установить местоположения NxN JTextField s?

+1

Для лучшей помощи раньше, опубликовать [SSCCE] (HTTP://sscce.org/). Это действительно похоже на то, что он лучше подходит для JTable. –

+0

Что такое «это» и какой макет используется? –

+0

Хороший вопрос .. –

ответ

0

Какова конкретная проблема? Что такое класс объекта? Кажется, проблема с компоновкой компонента контейнера.

Я бы рекомендовал вам добавить текстовые поля матрицы в выделенный JPanel с GridLayout.

Пример:

// ... 
    matrixPanel.setLayout(new GridLayout(rowCnt, rowCnt)); // matrixPanel is the dedicated JPanel 
    for(i=0;i<rowCnt;i++){ 
     for(j=0;j<rowCnt;j++){ 
       JTextField textField = new JTextField(); 
       matrixPanel.add(textField); // add the fields into the panel 
       //pack(); I think it wouldn't be needed 
     } 
    } 

Более подробную информацию о GridPanel в http://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html

1
import java.awt.Dimension; 
    import java.awt.GridBagConstraints; 
    import java.awt.GridBagLayout; 
    import java.awt.Insets; 
    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 Test 
    { 
     // Field members 
     static JPanel panel = new JPanel(); 
     static Integer indexer = 1; 
     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(990, 990)); 
      frame.setTitle("My Example"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

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

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

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

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

      // Add panel to frame 
      frameConstraints.gridx = 0; 
      frameConstraints.gridy = 1; 
      frameConstraints.weighty = 1; 
      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) 
      {  

       panel.removeAll(); 
       GridBagConstraints textFieldConstraints = new GridBagConstraints(); 

       int rowCnt=4,i,j; 

       for(i=0;i<rowCnt;i++){ 
        for(j=0;j<rowCnt;j++){ 
         JTextField g=new JTextField(); 
         g.setText("7"); 
         textFieldConstraints.gridx = i; 
         textFieldConstraints.fill = GridBagConstraints.HORIZONTAL; 
         textFieldConstraints.weightx = 0.5; 
         textFieldConstraints.insets = new Insets(10, 10, 10, 10); 
         textFieldConstraints.gridy = j; 
         panel.add(g, textFieldConstraints); 
        } 
       } 

       panel.updateUI(); 
      } 


     } 
    } 

попробовать это и получить то, что вы хотите

+1

@ Gandalf rowCnt - это параметр, который вы получаете. Соответственно, я нашел аналогичный код и отредактировал его для вас. –

+0

Ты потрясающий, я попробую это – saidozcan

Смежные вопросы