Я работаю над небольшим проектом, который включает в себя JTable
, который требует, чтобы пользователь нажал кнопку и добавил строку в таблицу (я назвал эту кнопку как addrow
). Я использовал пользовательскую модель таблицы (Mytablemodel
), которая расширяет модель таблицы по умолчанию. Моя таблица первая из пяти строк и 4 столбца, где после этого пользователь может нажать кнопку addrow
, чтобы добавить больше строкКак вставить новую строку в JTable, используя пользовательскую модель таблицы?
Все в моем коде работает отлично, за исключением кнопки addrow
, которая ничего не делает. Буду признателен за любую помощь.
public class AddingNewRows extends JFrame {
JTable mytable;
JButton addrow;
String[] columns={"Admission number","Name","School","Year"};
TableColumn tc;
int defaultrows=5;
int rows=new Mytablemodel().getRowCount(),columnscount=new Mytablemodel().getColumnCount();
List data=new ArrayList();
Mytablemodel mytbm;
//
public AddingNewRows(){
super("adding rows");
for(int initialrows=0; initialrows<5; initialrows++){
String[] items={"1","2","3","4"};
data.add(items);
}
mytbm=new Mytablemodel();
mytable=new JTable(mytbm);
JScrollPane scroll=new JScrollPane(mytable);
addrow=new JButton("ADD ROW");
//
JPanel buttonpanel=new JPanel();
buttonpanel.setLayout(new BoxLayout(buttonpanel,BoxLayout.X_AXIS));
buttonpanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
buttonpanel.add(addrow);
//
add(scroll,BorderLayout.CENTER);
add(buttonpanel,BorderLayout.SOUTH);
addrow.addActionListener(new Myactions());
}
public class Mytablemodel extends DefaultTableModel{
@Override
public String getColumnName(int column) {
return columns[column];
}
@Override
public Object getValueAt(int row, int col){
return ((String[])data.get(row))[col];
}
@Override
public boolean isCellEditable(int row, int col){
return true;
}
@Override
public void setValueAt(Object value,int row, int col){
((Object[])data.get(row))[col]=value;
fireTableCellUpdated(row,col);
}
@Override
public Class getColumnClass(int column){
return getValueAt(0,column).getClass();
}
@Override
public int getColumnCount(){
return columns.length;
}
@Override
public int getRowCount(){
return increaserows;
}
@Override
public void addRow(Object[] mynewdata){
int rownum=data.size();
System.out.println(rownum);
data.add(madata);
fireTableRowsInserted(rownum,rownum);
}
}
//
private class Myactions implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
if(event.getSource()==addrow){
Object[]newdata={"","","",""};
mytbm.addRow(newdata);
}
}
}
public static void main(String[] args) {
AddingNewRows frame=new AddingNewRows();
frame.setVisible(true);
frame.setSize(400,400);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
}
Слова, напечатанные во всех нижних регистрах, трудно читать, например, пытаться выслушать кого-то, кто бормочет. Пожалуйста, используйте письмо в верхнем регистре в начале предложений, для слова I и собственные имена, такие как 'ArrayList' или Oracle. –
'Mytablemodel расширяет AbstractTableModel {' Сделайте себе одолжение и вместо этого расширьте ** 'DefaultTableModel' **. Он делает этот тип вещей для вас. Но для лучшей помощи раньше, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Self Содержащийся, правильный пример). –
@AndrewThompson все данные, введенные в таблицу, впоследствии сохраняются в базе данных через кнопку onther, и это отлично работает. вот почему я использовал пользовательскую модель таблицы, так как я не думаю, что могу использовать DefaultTableModel для сохранения данных в базе данных. кроме того, AM НЕОБХОДИМО ПРОБЛЕМЫ, ПОНИМАЮЩИЕ метод fireTableRowsInserted (int, int). параметры сами и где или когда вызывать метод –