RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1600898
Accepted
Kirill
Kirill
Asked:2024-11-26 19:36:01 +0000 UTC2024-11-26 19:36:01 +0000 UTC 2024-11-26 19:36:01 +0000 UTC

输入一个 JTable 单元格的值后,该单元格的值会复制到所有单元格

  • 772

我有一个程序,目前实现了添加和删除表格列的功能,但有一个问题:当您向该表格中输入值时,它们开始在其他单元格中重复:

我在一个单元格中输入一个值:图1

然后我按 Enter 键停止编辑单元格,不知何故,该单元格左侧的所有单元格都神奇地填充了相同的值:图2

如果我单击该单元格右侧的任何单元格,则原始单元格和单击单元格之间的所有单元格(包括它)都将填充相同的值:图3

如果我与按钮交互以沿着一行单元格移动,则所有单元格都会填充相同的值。

代码:

package ru.kirill.task9;


import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import ru.kirill.addition.Addition;


public class GraphicApp {
    private boolean isReverse = false;

    class MainFrame extends JFrame {
        private static final String TITLE = "Главное меню";
        private static final String MINUS = "-";
        private static final String PLUS = "+";
        private static final String OPEN_BUTTON_TEXT = "Открыть";
        private static final String SAVE_BUTTON_TEXT = "Сохранить";
        private static final String REVERSE_BUTTON_TEXT = "Перевернуть";
        private static final String ENTER_LABEL_TITLE = "Количество элементов";
        private static final String CALCULATE_BUTTON_TEXT = "Рассчитать";
        private static final String REFRESH_BUTTON_TEXT = "Обновить";

        JButton minusButton;
        JButton refreshButton;
        JButton plusButton;
        JButton openButton;
        JButton saveButton;
        JButton reverseButton;
        JButton calculateButton;
        JTable inputTable;
        JTable outputTable;
        JLabel titleOfEnterQuantityElements;
        JTextField fieldOfEnterQuantityElements;


        MainFrame() {
            super(TITLE);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            createMainFrameLayout();

            minusButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int numberOfCells = Integer.parseInt(fieldOfEnterQuantityElements.getText());
                    if (numberOfCells > 1) {
                        fieldOfEnterQuantityElements.setText(
                            Integer.toString(
                                numberOfCells - 1));
                    }
                }
            });

            refreshButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int numberOfCells = 1;
                    try {
                        numberOfCells = Integer.parseInt(fieldOfEnterQuantityElements.getText());
                    } catch (NumberFormatException err) {
                        JOptionPane.showMessageDialog(null,
                                                      "Вы ввели неверное значение");
                        fieldOfEnterQuantityElements.setText("1");
                    }
                    int columnCount = inputTable.getColumnCount();
                    if (numberOfCells < 1) {
                        numberOfCells = 1;
                        fieldOfEnterQuantityElements.setText("1");
                    }
                    if (numberOfCells < columnCount) {
                        TableColumnModel inputTableModel = inputTable.getColumnModel();
                        for (int i = 0; i < columnCount - numberOfCells; i++) {
                            inputTable.removeColumn(inputTableModel.getColumn(columnCount - i - 1));
                        }
                    } else {
                        for (int i = 0; i < numberOfCells - columnCount; i++) {
                            TableColumn newColumn = new TableColumn();
                            newColumn.setCellRenderer(new CustomCellRenderer());
                            newColumn.setCellEditor(new CustomCellEditor(new JTextField()));
                            inputTable.addColumn(newColumn);
                        }
                    }
                }
            });

            plusButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    fieldOfEnterQuantityElements.setText(
                        Integer.toString(
                            Integer.parseInt(fieldOfEnterQuantityElements.getText()) + 1));
                }
            });

            pack();
            setSize(600, 285);
            setLocationRelativeTo(null);
            setResizable(false);
            setVisible(true);

            calculateButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    for (int i = 0; i < inputTable.getColumnCount(); i++) {
                        System.out.print(inputTable.getValueAt(0, i));
                    }
                }
            });
        }


        private void createMainFrameLayout() {
            Container pane = getContentPane();
            pane.setLayout(new GridBagLayout());
            GridBagConstraints layout = new GridBagConstraints();

            JPanel topInteractionPanel = new JPanel(new GridBagLayout());
            topInteractionPanel.setBackground(Color.GREEN);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 0.15;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            pane.add(topInteractionPanel, layout);

            minusButton = new JButton(MINUS);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 0.1;
            layout.weighty = 1;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            topInteractionPanel.add(minusButton, layout);

            JPanel enterQuantityElementsPanel = new JPanel(new GridBagLayout());
            layout.weightx = 0.8;
            layout.weighty = 1;
            layout.gridx = 1;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            topInteractionPanel.add(enterQuantityElementsPanel, layout);

            titleOfEnterQuantityElements = new JLabel(ENTER_LABEL_TITLE);
            layout.weightx = 1;
            layout.weighty = 0.5;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            enterQuantityElementsPanel.add(titleOfEnterQuantityElements, layout);

            JPanel enterTextFieldPanel = new JPanel(new GridBagLayout());
            layout.weightx = 1;
            layout.weighty = 0.5;
            layout.gridx = 0;
            layout.gridy = 1;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            enterQuantityElementsPanel.add(enterTextFieldPanel, layout);

            fieldOfEnterQuantityElements = new JTextField();
            fieldOfEnterQuantityElements.setText("1");
            layout.weightx = 0.7;
            layout.weighty = 1;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            enterTextFieldPanel.add(fieldOfEnterQuantityElements, layout);

            refreshButton = new JButton(REFRESH_BUTTON_TEXT);
            layout.weightx = 0.3;
            layout.weighty = 1;
            layout.gridx = 1;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            enterTextFieldPanel.add(refreshButton, layout);

            plusButton = new JButton(PLUS);
            layout.weightx = 0.1;
            layout.weighty = 1;
            layout.gridx = 2;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            topInteractionPanel.add(plusButton, layout);


            JPanel inputTablePanel = new JPanel(new GridBagLayout());
            inputTablePanel.setBackground(Color.BLUE);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 0.30;
            layout.gridx = 0;
            layout.gridy = 1;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            pane.add(inputTablePanel, layout);

            inputTable = new JTable(1, 1);
            TableColumnModel inputTableModel = inputTable.getColumnModel();
            TableColumn firstColumn = new TableColumn();
            firstColumn.setCellRenderer(new CustomCellRenderer());
            firstColumn.setCellEditor(new CustomCellEditor(new JTextField()));
            inputTableModel.addColumn(firstColumn);
            inputTableModel.removeColumn(inputTable.getColumnModel().getColumn(0));
            inputTable.setTableHeader(null);
            inputTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            inputTable.setRowHeight(50);
            JScrollPane inputScrollPane = new JScrollPane(inputTable);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 1;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            inputTablePanel.add(inputScrollPane, layout);


            JPanel bottomInteractionPanel = new JPanel(new GridBagLayout());
            bottomInteractionPanel.setBackground(Color.ORANGE);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 0.15;
            layout.gridx = 0;
            layout.gridy = 2;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            pane.add(bottomInteractionPanel, layout);

            openButton = new JButton(OPEN_BUTTON_TEXT);
            layout.weightx = 0.25;
            layout.weighty = 1;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            bottomInteractionPanel.add(openButton, layout);

            saveButton = new JButton(SAVE_BUTTON_TEXT);
            layout.weightx = 0.25;
            layout.weighty = 1;
            layout.gridx = 1;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            bottomInteractionPanel.add(saveButton, layout);

            reverseButton = new JButton(REVERSE_BUTTON_TEXT);
            layout.weightx = 0.25;
            layout.weighty = 1;
            layout.gridx = 2;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            bottomInteractionPanel.add(reverseButton, layout);

            calculateButton = new JButton(CALCULATE_BUTTON_TEXT);
            layout.weightx = 0.25;
            layout.weighty = 1;
            layout.gridx = 3;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            bottomInteractionPanel.add(calculateButton, layout);


            JPanel outputTablePanel = new JPanel(new GridBagLayout());
            outputTablePanel.setBackground(Color.RED);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 0.30;
            layout.gridx = 0;
            layout.gridy = 3;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            pane.add(outputTablePanel, layout);

            outputTable = new JTable(1, 1);
            outputTable.setTableHeader(null);
            outputTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            outputTable.setRowHeight(50);
            outputTable.setEnabled(false);
            JScrollPane outputScrollPane = new JScrollPane(outputTable);
            layout.fill = GridBagConstraints.BOTH;
            layout.weightx = 1;
            layout.weighty = 1;
            layout.gridx = 0;
            layout.gridy = 0;
            layout.gridwidth = 1;
            layout.gridheight = 1;
            outputTablePanel.add(outputScrollPane, layout);
        }


        class CustomCellEditor extends DefaultCellEditor {
            public CustomCellEditor(JTextField textField) {
                super(textField);
                this.clickCountToStart = 1;
            }
        }


        class CustomCellRenderer extends DefaultTableCellRenderer {
            public Component getTableCellRendererComponent(JTable table, Object value,
                                                           boolean isSelected, boolean hasFocus,
                                                           int row, int column) {
                setFont(table.getFont());
                setValue(value);
                return this;
            }
        }
    }


    public GraphicApp() {
        new MainFrame();
    }
    public GraphicApp(boolean isReverse) {
        this.isReverse = isReverse;
        new MainFrame();
    }


    public static void main(String[] args) {
        new GraphicApp();
    }
}

如何删除此自动完成功能以使一切正常?

java
  • 1 1 个回答
  • 22 Views

1 个回答

  • Voted
  1. Best Answer
    Kirill
    2024-12-03T03:32:51Z2024-12-03T03:32:51Z

    我能够通过使用 DefaultTableModel 作为表模型来解决我的问题

    inputTableModel = new DefaultTableModel(new String[1], 1);
    inputTable = new JTable(inputTableModel);
    inputTable.setDefaultRenderer(
        Object.class, new CustomCellRenderer());
    inputTable.setDefaultEditor(
        Object.class, new CustomCellEditor(new JTextField()));
    inputTable.setTableHeader(null);
    inputTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    inputTable.setRowHeight(50);
    JScrollPane inputScrollPane = new JScrollPane(inputTable);
    layout.fill = GridBagConstraints.BOTH;
    layout.weightx = 1;
    layout.weighty = 1;
    layout.gridx = 0;
    layout.gridy = 0;
    layout.gridwidth = 1;
    layout.gridheight = 1;
    inputTablePanel.add(inputScrollPane, layout);
    
    • 0

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5