Мы должны сделать программу, которая немного похожа на Excel. Теперь у меня проблема в том, что я хочу сделать поле из 999 столбцов и 999 строк. Я уже пытался использовать только 999*999 JTextField
элементов управления, но это, очевидно, требует очень много времени, и я получаю исключение, что памяти не осталось. Как я могу сделать это лучше? Должен ли я пытаться отображать только те текстовые поля, которые используются, или есть лучший способ сделать таблицу?
Вот мой код:
tablePanel = new JPanel();
tablePanel.setLayout(new GridBagLayout());
tablePanel.setSize(100, 30);
tablePanel.setBorder(null);
JScrollPane tableScroll = new JScrollPane(tablePanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//tableScroll.getVerticalScrollBar().setPreferredSize(new Dimension(0,0));
//tableScroll.getVerticalScrollBar().setUnitIncrement(25);
tableScroll.setBounds(0, 30, 30, this.getHeight());
table = new ArrayList<>();
for (int i = 0; i < 999; i++) {
ArrayList<Component> column = new ArrayList<>();
for (int j = 0; j < 999; j++) {
JTextField field = new JTextField();
field.setPreferredSize(new Dimension(100, 30));
field.setBorder(null);
field.setFocusCycleRoot(false);
field.setFocusable(false);
gbc.gridy = j;
gbc.gridx = i;
column.add(field);
tablePanel.add(field, gbc);
}
table.add(column);
}
@camickr Спасибо, я посмотрю на это
Вы можете создать javax.swing.JTable
следующим образом:
JTable table = new JTable(999,999); // creates a 999*999 table
TableCellEditor tce = table.getCellEditor();
// use tce to follow user
и используйте tce
, чтобы следить за тем, что пользователь делает с какой ячейкой.
Более подробное руководство по javax.swing.JTable
см. в статье Как использовать таблицы.
Спасибо за эту информацию. Один вопрос. Можно ли также сделать "сервант" или как его можно назвать. Итак, как и в Excel, у вас есть имена столбцов A, B, C,... и имена строк 1, 2, 3,... возможно ли сделать это с JTable? Итак, у вас есть заголовок и то же самое сбоку?
Да, это возможно, как говорит @AndrewThompson, в каждом сообщении должен быть один вопрос, но чтобы предотвратить дублирование вопроса, если вы выполните поиск в Google для JTable header top and left
, вы в конечном итоге получите этот ответ от thrashgod: stackoverflow.com/a/8005006/2180785, который делает то, что вы хотите.
См.: Как использовать таблицы