Как отобразить матрицу в JavaFX - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два текстовых поля и кнопка. Первый будет иметь количество строк, второй будет иметь количество столбцов. Кнопка должна создать таблицу с этими номерами, а затем сделать некоторые вещи с элементами этой таблицы. Есть ли для этого аналог GridView из C #? Потому что, как я вижу, я не могу изменить количество строк в TableView, и я думаю, что это вызовет проблемы в будущих вычислениях. Вот пример из c #:

n = Int32.Parse(numericUpDown1.Text);
m = Int32.Parse(numericUpDown2.Text);
dataGridView1.RowCount = n;
dataGridView1.ColumnCount = m;

enter image description here

Что я могу использовать, чтобы сделать то же самое в Java?

1 Ответ

0 голосов
/ 13 ноября 2018

Java Swing имел JTable. В Java FX этот элемент управления называется TableView. https://docs.oracle.com/javafx/2/ui_controls/table-view.htm

Это довольно сложное управление. Вы должны создать таблицу, а затем добавить объекты столбца к объекту таблицы, как показано ниже:

DefaultTableModel tableModel = new DefaultTableModel ();

    javax.swing.JComboBox<Integer> jComboBoxRows = new javax.swing.JComboBox<>();
    javax.swing.JComboBox<Integer> jComboBoxColumns = new javax.swing.JComboBox<>();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Simple JTable Example");

    jComboBoxRows.setModel(new javax.swing.DefaultComboBoxModel<>(new Integer[]{1, 2, 3, 4}));

    jTable1.setModel(tableModel);

   jComboBoxRows.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            Integer tableRowValue = (Integer) jComboBoxRows.getSelectedItem();
            tableModel.setNumRows(tableRowValue.intValue());
            tableModel.fireTableDataChanged();
        }
    });

    jComboBoxColumns.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            Integer tableColumnValue = (Integer) jComboBoxColumns.getSelectedItem();
            tableModel.setColumnCount(tableColumnValue.intValue());
            tableModel.fireTableDataChanged();
        }
    });

Это ОЧЕНЬ универсально. В основном вы используете DefaultTableModel и изменяете модель, используя «set» или «add» или «remove» для столбцов и строк. Затем вы ДОЛЖНЫ ОГОНИТЬ событие, чтобы пользовательский интерфейс обновлялся в зависимости от изменений модели. Два слушателя наивны, но это ставит вас на правильный путь. Извините, я не мог привести лучший пример. Не хватает времени ...: -)

Удачи!

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