У меня проблема с моей настольной программой. Может ли кто-нибудь сказать мне, как это решить?

Мы должны сделать программу, которая немного похожа на 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 20.05.2019 00:34

@camickr Спасибо, я посмотрю на это

KaNaDa 20.05.2019 00:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать 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? Итак, у вас есть заголовок и то же самое сбоку?

KaNaDa 20.05.2019 01:03
"Один вопрос." Любая ветка вопросов и ответов Stack Overflow должна быть посвящена одному вопросу/проблеме. Другие вопросы лучше перенести в новую специальную ветку вопросов и ответов.
Andrew Thompson 20.05.2019 04:48

Да, это возможно, как говорит @AndrewThompson, в каждом сообщении должен быть один вопрос, но чтобы предотвратить дублирование вопроса, если вы выполните поиск в Google для JTable header top and left, вы в конечном итоге получите этот ответ от thrashgod: stackoverflow.com/a/8005006/2180785, который делает то, что вы хотите.

Frakcool 20.05.2019 16:39

Другие вопросы по теме