Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将列添加到JTable,该表在添加之前有一些行_Java_Swing_Netbeans_Jtable_Defaulttablemodel - Fatal编程技术网

Java 将列添加到JTable,该表在添加之前有一些行

Java 将列添加到JTable,该表在添加之前有一些行,java,swing,netbeans,jtable,defaulttablemodel,Java,Swing,Netbeans,Jtable,Defaulttablemodel,我有一个JTable,它包含4列,例如10行。我想添加一个新列,并为其中的每一行设置最大值 下面是我用来计算最大值并将其放入新列的函数: private void jFindmaximumActionPerformed(java.awt.event.ActionEvent evt) { DefaultTableModel model = (DefaultTableModel)jMYtable

我有一个
JTable
,它包含4列,例如10行。我想添加一个新列,并为其中的每一行设置最大值

下面是我用来计算最大值并将其放入新列的函数:

private void jFindmaximumActionPerformed(java.awt.event.ActionEvent evt) {                                             
        DefaultTableModel model = (DefaultTableModel)jMYtable.getModel();
        TableColumn col = new TableColumn(model.getColumnCount());
        String headerLabel = "Maximum";
        col.setHeaderValue(headerLabel);
        jMYtable.addColumn(col);

        model.addColumn(headerLabel.toString(), new Object [0]);  
        double[] MAX = new double[ndata[0].length];
        for(int i = 0; i < ndata[0].length; i++){
            MAX[i] = ndata[i][0];
            for(int j = 0 ; j < ndata.length; j ++){
                if(ndata[j][i] > MAX[i]){
                    MAX[i] = ndata[j][i];
                }
            }
            model.setValueAt(MAX[i],i,4);
        }
        jMYtable.revalidate();
 } 
private void jFindmaximumActionPerformed(java.awt.event.ActionEvent evt){
DefaultTableModel=(DefaultTableModel)jMYtable.getModel();
TableColumn col=新的TableColumn(model.getColumnCount());
字符串标题标签=“最大值”;
col.setHeaderValue(headerLabel);
jMYtable.addColumn(col);
model.addColumn(headerLabel.toString(),新对象[0]);
双精度[]最大值=新双精度[n数据[0]。长度];
对于(int i=0;iMAX[i]){
MAX[i]=ndata[j][i];
}
}
型号.setValueAt(最大[i],i,4);
}
jMYtable.revalidate();
} 
如果在调用此方法时我的表没有任何行,则会添加新列并显示在界面上。但是,当我用10行填充表并调用此操作时,表运行不正常:

  • 存在一个gui重画问题,其中新列将仅显示 鼠标移动到
    jtable
    后;及
  • 新列没有任何数据

  • 请帮助。

    我测试了您的代码,虽然没有得到完全相同的错误,但有两件奇怪的事情:

    首先,您正在调用
    jMyTable.addColumn(…)
    model.addColumn(…)
    。这是一个错误。您只需要调用模型的addColumn。由于TableModel和TableColumnModel不同步,因此使用JTable方法添加一个列将导致不一致

    您的代码试图向模型中添加一个新列,而最大值的计算是错误的
    i
    应该在行中移动,
    j
    应该在列中移动,然后检查我们是否应该执行
    MAX[i]=ndata[i][j]作业。虽然传递
    新对象[0]
    似乎不会引起任何问题(因为具有空值的构造函数是有效的),但它没有任何意义

    应该是这样的:

    private void jFindmaximumActionPerformed(java.awt.event.ActionEvent evt) {  
        DefaultTableModel model = (DefaultTableModel)jMYtable.getModel();
        String headerLabel = "Maximum";
    
        Object[] MAX = new Object[ndata.length];
    
        for(int i = 0; i < ndata.length; i++){
             MAX[i] = ndata[i][0];
              for(int j = 0 ; j < ndata[0].length; j ++){
                      if(ndata[i][j] > MAX[i]){
                            MAX[i] = ndata[i][j];
                      }
                 }
        }
        model.addColumn(headerLabel, MAX);  
    }
    

    我发现新列没有任何行,这使得jtable的呈现出现问题,但是我如何才能只为该列添加行,或者我需要删除所有行并再次将它们插入jtable?代码应该是works,jMYtable.revalidate();是关于重新启动的,非常无用且非常困难的事件,名为ndata[0]。长度时间如何为新列插入行?新行会自动添加一个新列,确保对新列中的单元格有效1)
    //要在此处添加处理代码:
    在添加实际代码后删除这些注释。2) 请在句子开头加一个大写字母。也可以用大写字母表示I,缩写和首字母缩略词如JEE或WAR。这使得人们更容易理解和帮助。3) “请帮忙。”请问一个具体的问题。4) 为了更快地获得更好的帮助,请发布一条。感谢亲爱的DSquare为您提供的帮助。我改变了我的功能,并遵循你的,但我的问题仍然存在。这真的很可疑。。。可能是Netbeans IDE需要比这些更多的东西来做这样的事情…添加列应该不会那么难。你可以用一张桌子和一个按钮做一个简单的框架,效果很好。问题一定在别的地方。谢谢亲爱的DSquare。很好。好的,我想找出问题的主要原因。。。
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableModel;
    
    public class SimpleColumnAdderFrame
    {
        private DefaultTableModel _model;
    
        public static void main(String[] args) 
        {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new SimpleColumnAdderFrame().initUI();
                }
            });
        }
    
        public void initUI()
        {
            JFrame frame = new JFrame();        
            Object[][] data = {
                    {1,2,3},
                    {10,20,30}
            };
            String[] columnNames = {"Column 1", "Column 2", "Column 3"};        
            _model = new DefaultTableModel(data, columnNames);
            JTable table = new JTable(_model);
    
            JButton addColumnButton = new JButton("Add column");
            addColumnButton.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    int columns = _model.getColumnCount();
                    int rows = _model.getRowCount();
                    Object[] columnData = new Object[rows];
                    for (int i = 0; i < rows; ++i)
                    {
                        columnData[i] = (int) ((columns + 1)*(Math.pow(10, i))); // <- Unnecessarily complicated cell value 
                    }
                    _model.addColumn("New Column " + (columns + 1), columnData);
                }   
            });
    
            JButton addRowButton = new JButton("Add row");
            addRowButton.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    int columns = _model.getColumnCount();
                    int rows = _model.getRowCount();
                    Object[] rowData = new Object[columns];
                    for (int i = 0; i < columns; ++i)
                    {
                        rowData[i] = (int) ((i+1)*(Math.pow(10, rows))); // <- Unnecessarily complicated cell value 
                    }
                    _model.addRow(rowData);
                }
            });
    
            JPanel buttonPanel = new JPanel(new GridLayout(1,2,2,2));
            buttonPanel.add(addColumnButton);
            buttonPanel.add(addRowButton);
    
            frame.add(new JScrollPane(table), BorderLayout.CENTER);
            frame.add(buttonPanel, BorderLayout.PAGE_END);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    
    }