1
나는 stackoverflow에 비슷한 질문을 본 적이 있지만 어쨌든 이러한 대답으로 내 문제를 해결할 수 없습니다.JTable에서 행을 편집하는 방법
내가하고 싶으면 무엇 : 더블
- 클릭이 새를 인쇄하는 내 사용자 지정하는 TableModel의 셀의 새로운 값 저장
- (의 isCellEditable 방법 편집 덕분입니다) JTable가 세포에 값 내 데이터베이스에
- 업데이트 데이터 내가 무슨 짓을 (SQLite는)
:
- 이 의 TableModel
내 사용자 정의입니다.
import javax.swing.table.AbstractTableModel;
public class KierunkiTableModel extends AbstractTableModel {
private boolean DEBUG = false;
private String[] columnNames = { "Id", "Data Wstawienia",
"Data Modyfikacji", "Kierunek", "Opis" };
private Object[][] data = DodEdKierunki.populateData(DodEdKierunki.count);
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public boolean isCellEditable(int row, int col) {
return true;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
@Override
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
- 이 내 JPanel의 내 JTable의 인쇄입니다 :
합니다.
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import baza.danych.DBConnector;
public class DodEdKierunki extends JPanel implements ActionListener {
private JButton dodaj;
private JButton edytuj;
private JButton next;
private JButton previous;
static JTable table;
static Object[][] data = new Object[1][5];
static int count = setValue();
public DodEdKierunki() {
dodaj = new JButton("Dodaj");
edytuj = new JButton("Edytuj");
next = new JButton("Pokaż kolejne 5");
previous = new JButton("Pokaż poprzednie 5");
setLayout(new FlowLayout());
dodaj.addActionListener(this);
edytuj.addActionListener(this);
next.addActionListener(this);
previous.addActionListener(this);
add(dodaj);
add(edytuj);
add(next);
add(previous);
table = new JTable(new KierunkiTableModel());
table.setFillsViewportHeight(true);
table.getColumnModel().getColumn(0).setPreferredWidth(30);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(130);
table.getColumnModel().getColumn(4).setPreferredWidth(130);
table.setEnabled(true);
add(table.getTableHeader(), BorderLayout.PAGE_START);
add(table, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == dodaj) {
new DodajKierunekFrame();
} else if (source == edytuj) {
new EdytujKierunekJFrame();
} else if (source == next) {
DBConnector db = new DBConnector();
int id = db.getHighestID("Kierunki");
int currId = count + 5;
if (currId <= id) {
count = count + 5;
data = populateData(count);
KierunkiTableModel model = new KierunkiTableModel();
model.fireTableDataChanged();
table.setModel(model);
setLayout(new FlowLayout());
table.getColumnModel().getColumn(0).setPreferredWidth(30);
table.getColumnModel().getColumn(1).setPreferredWidth(130);
table.getColumnModel().getColumn(2).setPreferredWidth(130);
table.getColumnModel().getColumn(3).setPreferredWidth(100);
table.getColumnModel().getColumn(4).setPreferredWidth(130);
table.repaint();
db.closeConnection();
}
} else if (source == previous) {
if (count > 5) {
count = count - 5;
data = populateData(count);
KierunkiTableModel model = new KierunkiTableModel();
model.fireTableDataChanged();
table.setModel(model);
setLayout(new FlowLayout());
table.getColumnModel().getColumn(0).setPreferredWidth(30);
table.getColumnModel().getColumn(1).setPreferredWidth(130);
table.getColumnModel().getColumn(2).setPreferredWidth(130);
table.getColumnModel().getColumn(3).setPreferredWidth(100);
table.getColumnModel().getColumn(4).setPreferredWidth(130);
table.repaint();
}
}
}
static Object[][] populateData(int count) {
DBConnector db = new DBConnector();
Object[][] lista = db.selectKierunki(count, "Kierunki");
db.closeConnection();
return lista;
}
private static int setValue() {
DBConnector db = new DBConnector();
int value = db.getHighestID("Kierunki");
db.closeConnection();
return value;
}
}
내 문제는 : 나는 셀을 편집 할 수 있지만이 변경 사항을 저장하는 방법을 모르겠어요. 그래서 내 질문은 : 어떻게 JTable에서 행을 편집 한 후 데이터 모델을 변경하려면?
내가
http://download.oracle.com/javase/tutorial/uiswing/components/table.html을 읽고'방법의 JTable의 행을 편집 한 후 데이터 모델을 변경하는 방법'- 당신은 특별한 아무것도하지?. 에디터는, 셀의 편집을 완료하면, TableModel를 갱신합니다. 왜 사용자 정의 TableModel을 작성하고 있습니까? DefaultTableModel을 사용할 수 있습니다. 2D Array를 사용하여 모델을 만들 수 있습니다. – camickr
두 가지 옵션이 있습니다. 'setValueAt' 메쏘드가 호출 될 때 데이터베이스를 업데이트하거나 변경을 위해'TableModel'에 리스너를 사용하십시오. 개인적으로, 첫 번째 방법은 더 간단합니다 ... – MadProgrammer