[英]Inserting a row into a JTable
编辑:问题已解决。 我不小心在if
语句中放了一个return
而不是break
。 该函数在更改DefaultTableModel
之前退出。
StockNameArr
是表中所有股票代码(按字母顺序排列)的数组,其自身按字母顺序排列。
此类表示带有两个可单击列的JTable
。 第一列现在仅打印到stdout
,并且工作正常。 第二个删除它所在的行,并在JComboBox
中按字母顺序排列每个股票的名称。 据我所知,这也可以正常工作。
单击JComboBox
中的项目之一时,它应删除该项目,创建一个String[8]
(与其他8行的列匹配),从单击的项目中插入库存名称,然后将数组插入为行与先前从中删除的位置相同。
但是,实际上发生的是从JComboBox
删除了该项目,而从未将新行插入到表中。 我试着打电话给:
model.insertItemAt(...);
thisTable.setModel(model);
但是它什么也没做。 考虑到model
或thisTable
可能thisTable
正确设置,我thisTable
引用为类变量,并试图在TableModel
插入一行,甚至没有在内部类中为其创建新变量。 仍然没有运气。
谁能帮我?
import java.awt.event.Action/Event;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JMainTable extends JTable {
JMainTable thisTable = this; //Represents this class in inner classes
final String[] stockNames;
DefaultTableModel model;
JComboBox<String> dropdown;
ArrayList<String> dropdownStocks = new ArrayList<String> ();
int rowChangeOffset = 0;
public JMainTable(DefaultTableModel tableModel, String[] stockNameArr, JComboBox<String> combobox) {
super(tableModel);
// thisTable = this;
stockNames = stockNameArr;
addMouseListener(new mainTableListener());
model = tableModel;
dropdown = combobox;
dropdown.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
//^ prevents ActionListener from firing when scrolling through list with arrow keys
dropdown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!e.getActionCommand().equals(ActionEvent.KEY_EVENT_MASK)){
System.out.println("Clicked");
JComboBox<String> source = (JComboBox<String>) e.getSource();
String stockString = (String) source.getSelectedItem();
int index = dropdownStocks.indexOf(stockString);
try {
source.removeItemAt(index);
dropdownStocks.remove(index);
} catch(ArrayIndexOutOfBoundsException arrEx) {}
int indexInStockNames = 0; //for compiler
for(int i = 0; i<stockNames.length; i++) {
if(stockNames[i].equals(stockString)) {
indexInStockNames = i;
return;
}//end of If
}//End of For
String[] replacementRow = new String[8];
replacementRow[0] = stockString;
//model.insertRow(indexInStockNames, replaceRow);
((DefaultTableModel) thisTable.getModel()).insertRow(indexInStockNames, replacementRow);
if(index>=0) {//Prevents offset from being changed
//when user clicks on empty JComboBox
rowChangeOffset--;
}
}
}
});
}
class mainTableListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent mouseevent) {
int column;
if((column = thisTable.getSelectedColumn()) == 6) {
int row = thisTable.getSelectedRow();
System.out.println("Button for " + stockNames[row + rowChangeOffset] + " working.");//TESTING
//NOIMPLEMEN
} else if((column = thisTable.getSelectedColumn()) == 7) {
int row = thisTable.getSelectedRow();
model.removeRow(row);
try{
dropdownStocks.add(stockNames[row + rowChangeOffset]);
} catch(Exception adsf) {adsf.printStackTrace(); System.out.println(stockNames[row+rowChangeOffset]);}
int index;
try {
Collections.sort(dropdownStocks);
index = dropdownStocks.indexOf(stockNames[row+rowChangeOffset]);
} catch(Exception ex) {/*dropdownStocks may be empty*/
index=0;
}
dropdown.insertItemAt(stockNames[row+rowChangeOffset], index);
rowChangeOffset = rowChangeOffset + 1;
}
}
}
}
尝试此操作,这将有助于在模型中添加链接到表的行
model.addRow(new Object[]{objec1,object2}); //param to count of columns to table
jTable1.setModel(modelo);
/*You are not required if in the beginning did something like this
modelo = (DefaultTableModel)jTable1.getModel();*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.