Я создал небольшую программу, которая может создавать строки и столбцы во время выполнения, для набора наборов математических классов, у меня уже есть программа для создания строк и столбцов, но то, что я хочу сделать дальше, сможет получить значения внутри и затем загрузите другую форму той же структуры и получите значения форм, затем добавьте их и покажите их в окончательной форме. Довольно неожиданно для всей 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
Простой ответ на ваш вопрос заключается в том, что вам нужно определить массив 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]);
}
}
Там могут быть синтаксические ошибки, так как я просто печатаю их здесь.
Чтобы получить текст из вызова JTextField.getText() на объекте. поэтому r.getText();
Элегантный способ получить номер из поля - использовать Integer.parseInt(String)
поэтому ваш вызов будет Integer.parseInt(r.getText()). Обратите внимание, что это может вызвать
NumberFormatException, поэтому вам придется поймать исключение и, возможно, перепрограммировать пользователя на ввод допустимого числа.