使用JTextFields或JTextAreas创建矩阵

时间:2010-12-01 02:40:27

标签: java matrix

我必须做一个必须能够以Jtextfields或Jtextareas的形式显示矩阵的程序,以便用户可以在其中写入(每个Jtextfield的一些矩阵)。 问题是我不知道如何创建一个自定义JPanel,其中包含用户指定的Jtextfields的大小和数量(每次都不同)。 我已经用Google搜索了这个问题,但无济于事。

3 个答案:

答案 0 :(得分:1)

看看GridLayout。将网格与几个参数(行和列数)组合在一起非常简单。从JavaDoc中解释:

   public static void main (String[] args) {


         JPanel panel = new JPanel();     
         panel.setLayout(new GridLayout(3,2));
         panel.add(new JTextField("1"));
         panel.add(new JTextField("2"));
         panel.add(new JTextField("3"));
         panel.add(new JTextField("4"));
         panel.add(new JTextField("5"));
         panel.add(new JTextField("6"));

将导致JTextFields

的3行乘2 col网格

编辑:

这里还有一个名为Demo的小组:

 public class Demo {

public static void main(final String[] args) {
    if (args.length < 2) {
        System.out.print("please enter row and col on commandline");
    }
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
            new Demo(Integer.parseInt(args[0]), Integer.parseInt(args[1]));

        }
    });

}


public Demo(int colCnt, int rowCnt) {
    JFrame frame = new JFrame("Demo");
    frame.setSize(600, 600);
    JPanel panel = new JPanel();     
    panel.setLayout(new GridLayout(colCnt,rowCnt));

    for (int i =0; i < rowCnt*colCnt; i++) {
       panel.add(new JTextField(""+i));
    }

    frame.setContentPane(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
}

答案 1 :(得分:0)

首先,我将构建一个文本字段\区域的二维数组。当您获得用户输入时,您可以初始化数组并“新建”所有小部件。将所有这些添加到父面板\框架后,您可能必须根据用完的尺寸进行一些计算并调整顶级窗口的大小。除此之外,正如已经建议的那样,GridLayout将是直接父组件的不错选择。

希望这有帮助。

答案 2 :(得分:0)

要在运行时更改外观,您需要做的就是用新组件替换内容。 因此,根据您的输入方式,您可以用输入替换akf答案中给出的数字。

panel.setLayout(new GridLayout( rows, columns));

然后显示您在JFrame中添加

的新面板
add( panel );

然而,您的任务可能是继承JPanel以显示矩阵的行。我的措辞让你印象深刻。然后是一个完全不同的解决方案。

如果您的唯一目标是实现一个可以编辑值的矩阵,那么JTable是最简单的。将以下内容放在JFrame中

    DefaultTableModel data = new DefaultTableModel(3 , 3);// rows, cols
    JTable table = new JTable(data);
    add(table);
    pack();
    setVisible(true);

这也可以通过使用data.setRowCount(newValue)简化修改矩阵的高度和宽度。