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行填充表并调用此操作时,表运行不正常:
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);
}
}