从运行时创建的JTextField中获取值

时间:2014-03-16 02:16:58

标签: java swing user-interface jtextfield

我设置了一个可以在运行时创建行和列的小程序,它用于实现集合的数学类,我已经有了创建行和列的程序但是我接下来要做的就是能够得到在里面的值然后加载相同结构的另一种形式并获得表单值然后添加它们并在最终表单上显示它们。整个java的东西都相当新,所以如果有人能帮助它,那就意味着世界。这是我到目前为止所拥有的......

import java.awt.*;
import java.awt.event.ActionEvent;   
import javax.swing.*;

public class Matrice extends JFrame {

protected static final int PREF_W = 200;
protected static final int PREF_H = 200;
JPanel mainPanel = new JPanel() {
  @Override
  public Dimension getPreferredSize() {
     return new Dimension(PREF_W, PREF_H);
  }
 };

 public JComponent getMainComponent() {
  return mainPanel;
   }

public Matrice(){
int rows, columns, end;

String RI, CI;

RI = JOptionPane.showInputDialog(null, "How many rows: ");
rows = Integer.parseInt(RI);
CI = JOptionPane.showInputDialog(null, "How many columns: ");
columns = Integer.parseInt(CI);
end = rows * columns;

JPanel holder = new JPanel(new GridLayout(rows, columns));
    holder.setVisible(true);
for(int i = 0; i < end; i ++){
holder.add(new JTextField("output"));
}
JPanel set = new JPanel(new GridLayout(1, 0));
JTextField r = new JTextField("rows");
JTextField c = new JTextField("columns");
set.add(r);
set.add(c);
set.add(new JButton("Set"));
mainPanel.add(set, BorderLayout.SOUTH);
mainPanel.add(holder, BorderLayout.NORTH);
}

 private static void createAndShowGui() {
   Matrice test = new Matrice();
   JFrame frame = new JFrame("Matrice");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.getContentPane().add(test.getMainComponent());
   frame.pack();
   frame.setLocationRelativeTo(null);
   frame.setVisible(true);
    }

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
     public void run() {
        createAndShowGui();
     }
    });
}

    }

不要介意按钮和预设的TextField

2 个答案:

答案 0 :(得分:1)

您的问题的简单答案是,您需要在获得大小后定义TextField数组:

TextField[][] inputFields = new TextField[rows][columns];

现在添加TextField s

getContentPane().setLayout(new GridLayout(rows, columns));
for(int i = 0; i < rows; i++){
    for(int j = 0; j < columns; j++){
        inputFields[i][j] = new TextField("output");
        holder.add(inputFields[i][j]);
    }
}

上面可能存在语法错误,因为我在这里直接输入。

答案 1 :(得分:0)

要从对象上的JTextField调用.getText()中获取文本。所以r.getText();

从字段中获取数字的一种优雅方法是使用Integer.parseInt(String)

所以你的调用将是Integer.parseInt(r.getText())注意这可能会抛出

NumberFormatException因此您必须捕获异常并可能会重新提示用户输入有效数字。