Создайте матрицу, используя JTextFields или JTextAreas - PullRequest
1 голос
/ 01 декабря 2010

Мне нужно сделать программу, которая должна иметь возможность отображать матрицу в форме Jtextfields или Jtextareas, чтобы пользователь мог писать в них (номер матрицы для каждого поля Jtext).Проблема в том, что я понятия не имею, как создать пользовательскую JPanel с размером и количеством полей Jtext, которые задает пользователь (каждый раз разные).Я уже погуглил вопрос, но безрезультатно.

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

Взгляните на 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"));

приведет к 3-рядной решетке на 2 столбца JTextFields

EDIT:

вот еще несколькокласс с именем 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);
}
}
0 голосов
/ 01 декабря 2010

Чтобы изменить внешний вид во время выполнения, все, что вам нужно сделать, это заменить содержимое новыми компонентами.Таким образом, в зависимости от того, как вы получаете ввод, вы заменяете числа, указанные в ответе 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).

0 голосов
/ 01 декабря 2010

Прежде всего, я бы построил 2d массив текстовых полей \ областей. Получив пользовательский ввод, вы можете инициализировать массивы и «обновить» все виджеты. После добавления всех из них на родительскую панель \ фрейм вам, возможно, придется выполнить некоторые расчеты на основе использованного размера и изменить размер окна верхнего уровня. Кроме того, как уже предлагалось, GridLayout будет хорошим выбором для прямого родительского компонента.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...