[英]JTable not getting data from Vector
我的JTable有一个问题:它似乎是空的,并且没有从我传递给它的对象Vector中获取任何数据。 我检查了相关主题,但可悲的是我没有找到此问题的任何原因,并且几乎相同的代码实际上对我有用一次。 为了进行进一步的测试,我在单击按钮时创建了对象,将其添加到Vector中,然后尝试刷新表。 Printlns显示对象实际上已添加到Vector中,但表仍然为空。 我认为,问题一定在表代码中。 我发布了我的测试课程及相关课程,希望您能为我提供帮助。
测试类:
public class TEST_Table extends JFrame {
private PPControl ppc;
private EntryFilePM epm;
private JTable entryTable;
private JPanel entryTablePanel;
private JButton addButton;
private JButton saveButton;
private JButton loadButton;
private JPanel buttonsPanel;
private JLabel kursl;
private JTextField kurst;
private JLabel cnumberl;
private JTextField cnumbert;
private JLabel namel;
private JTextField namet;
private JLabel datel;
private JTextField datet;
private JLabel addressl;
private JTextField addresst;
private JLabel pdatestl;
private JTextField pdatestt;
private JLabel pdateendl;
private JTextField pdateendt;
private JLabel roadl;
private JTextField roadt;
private JLabel studyfl;
private JTextField studyft;
private JLabel naprl;
private JTextField naprt;
private JLabel ratingl;
private JTextField ratingt;
private JLabel averagel;
private JTextField averaget;
private JLabel profl;
private JTextField proft;
private JLabel pbasel;
private JTextField pbaset;
private JLabel homel;
private JTextField homet;
private JPanel horriblePanel;
private JButton saveEntryButton;
private JButton cancelEntryButton;
private JPanel entryButtonsPanel;
private JPanel entryEditPanel;
int idCounter = 1;
public static void main(String[] args) throws EntryExistsException {
try {
new TEST_Table();
} catch (IOException e) {
e.printStackTrace();
}
}
public int getIdCounterNext(){
return idCounter++;
}
public TEST_Table() throws IOException, EntryExistsException {
super("TEST");
ppc = new PPControl();
initialize();
}
private void initialize() {
setSize(1200,800);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setLayout(new BorderLayout());
createEntryTable();
createButtonsPanel();
createEntryTab();
add(entryTablePanel,BorderLayout.CENTER);
add(entryEditPanel, BorderLayout.WEST);
add(buttonsPanel, BorderLayout.SOUTH);
this.setVisible(true);
this.pack();
}
private void createEntryTable() {
final Vector<String> columns = new Vector<String>();
columns.add("Std");
columns.add("Contr #");
columns.add("Name");
columns.add("Birth dt");
columns.add("Address");
columns.add("Pr date start");
columns.add("Pr date end");
columns.add("Road");
columns.add("Std form");
columns.add("№ way");
columns.add("Rating");
columns.add("Avrg");
columns.add("Prof");
columns.add("Pr base");
columns.add("Home");
final EntryTableModel entryModel = new EntryTableModel(ppc.giveAllEntry(), columns);
entryTable = new JTable();
entryTable.setModel(entryModel);
entryTable.setShowGrid(true);
// entryTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// entryTable.getSelectionModel().addListSelectionListener(new TableSelectionListener());
JScrollPane entryScrollPane = new JScrollPane(entryTable);
entryTablePanel = new JPanel();
entryTablePanel.setLayout(new GridLayout());
entryTablePanel.add(entryScrollPane, BorderLayout.CENTER);
entryTablePanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
}
private void createButtonsPanel() {
addButton = new JButton("Add");
saveButton = new JButton("Save");
saveButton.addActionListener(new ButtonsListener());
loadButton = new JButton("Load");
loadButton.addActionListener(new ButtonsListener());
buttonsPanel = new JPanel();
buttonsPanel.setLayout(new GridLayout(1, 3));
buttonsPanel.add(addButton);
buttonsPanel.add(saveButton);
buttonsPanel.add(loadButton);
}
private void createEntryTab(){
JLabel kursl = new JLabel ("kurs");
kurst = new JTextField();
//otherlabels/tfields
JLabel ratingl = new JLabel("rating.double");
ratingt = new JTextField();
JLabel averagel = new JLabel("average.double");
averaget = new JTextField();
JLabel profl = new JLabel("profession");
proft = new JTextField();
JLabel pbasel = new JLabel("prak.base");
pbaset = new JTextField();
JLabel homel = new JLabel("home");
homet = new JTextField();
horriblePanel = new JPanel();
JScrollPane horribleScrollPane = new JScrollPane(horriblePanel);
horriblePanel.setLayout(new GridLayout(15,2));
// horriblePanel.add(horribleScrollPane, BorderLayout.CENTER);
horriblePanel.add(kursl);
horriblePanel.add(kurst);
//other labels/tfields
horriblePanel.add(homel);
horriblePanel.add(homet);
saveEntryButton = new JButton("Save");
saveEntryButton.addActionListener(new ButtonsListener());
cancelEntryButton = new JButton("Cancel");
entryButtonsPanel = new JPanel();
entryButtonsPanel.setLayout(new GridLayout());
entryButtonsPanel.add(saveEntryButton);
entryButtonsPanel.add(cancelEntryButton);
entryEditPanel = new JPanel();
entryEditPanel.setLayout(new GridLayout());
entryEditPanel.add(horriblePanel);
entryEditPanel.add(entryButtonsPanel);
}
class TableSelectionListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
int rowIndex = -1;
if (e.getSource().equals(entryTable.getSelectionModel())
&& entryTable.getSelectedRow() != -1) {
rowIndex = entryTable.convertRowIndexToModel(entryTable
.getSelectedRow());
EntryTableModel em = (EntryTableModel) entryTable.getModel();
Entry entry = em.giveEntryInRow(rowIndex);
}
}
}
class ButtonsListener implements ActionListener{
public void actionPerformed(final ActionEvent ae) {
if(ae.getSource().equals(addButton)){
}
if (ae.getSource().equals(saveButton)){
try {
epm.exportTable(entryTable);
} catch (IOException e) {
e.printStackTrace();
}
}
if(ae.getSource().equals(loadButton)){
try {
epm.importTable("C:/test.xls");
} catch (BiffException | IOException | ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ae.getSource().equals(saveEntryButton)) {
Calendar c = new GregorianCalendar();
int studyYear = 23;// Integer.parseInt(kurst.getText());
int contractNumber = getIdCounterNext();
contractNumber++;// Integer.parseInt(cnumbert.getText());
String stname = "Uano";// namet.getText();
Date birthDate = c.getTime();
// birthDate = epm.convertToDate(datet.getText());
String address = "abc asd fg 123";// addresst.getText();
Date practiceDateStart = c.getTime();
// practiceDateStart = epm.convertToDate(pdatestt.getText());
Date practiceDateEnd = c.getTime();
// practiceDateEnd = epm.convertToDate(pdateendt.getText());
String railway = "bad road";// roadt.getText();
String studyForm = "bad form";// studyft.getText();
int directionNumber = 1232; // =
// Integer.parseInt(naprt.getText());
double rating = 3.4;// Double.parseDouble(ratingt.getText());
double average = 4.5;// Double.parseDouble(averaget.getText());
String profession = "fcki";// proft.getText();
String practiceBase = "fckh";// pbaset.getText();
String inhabitation = "fckf2";// homet.getText();
try {
ppc.addEntry(studyYear, contractNumber, stname, birthDate,
address, practiceDateStart, practiceDateEnd, railway,
studyForm, directionNumber, rating, average,
profession, practiceBase, inhabitation);
for (Entry e : ppc.giveAllEntry()) {
System.out.println(e.getContractNumber());
System.out.println(e.getName());
System.out.println(e.getBirthDate());
}
final EntryTableModel em = (EntryTableModel) entryTable.getModel();
System.out.println("a");
em.setDataVector(ppc.giveAllEntry());
entryTable.updateUI();
System.out.println("b");
} catch (EntryExistsException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
TableModel类:
public class EntryTableModel extends DefaultTableModel {
private Vector<Entry> entryList;
public EntryTableModel(final Vector<Entry> eList, final Vector<String> columnNames) {
super();
this.columnIdentifiers = columnNames;
entryList = (Vector<Entry>) eList;
this.setDataVector(eList);
}
void setDataVector(final Vector<Entry> eList) {
final Vector<Vector<String>> rows = new Vector<Vector<String>>();
for (Entry e : eList) {
final Vector<String> entryAsVector = new Vector<String>();
entryAsVector.add("" + e.getStudyYear());
entryAsVector.add("" + e.getContractNumber());
entryAsVector.add(e.getName());
entryAsVector.add("" + e.getBirthDate());
entryAsVector.add(e.getAddress());
entryAsVector.add("" + e.getPracticeDateStart());
entryAsVector.add("" + e.getPracticeDateEnd());
entryAsVector.add(e.getRailway());
entryAsVector.add(e.getStudyForm());
entryAsVector.add("" + e.getDirectionNumber());
entryAsVector.add("" + e.getRating());
entryAsVector.add("" + e.getAverage());
entryAsVector.add(e.getProfession());
entryAsVector.add(e.getPracticeBase());
entryAsVector.add(e.getInhabitation());
}
this.setDataVector(rows, columnIdentifiers);
}
public boolean isCellEditable(int row, int column) {
return false;
}
public Entry giveEntryInRow(int row) {
return entryList.get(row);
}
给我对象矢量的功能
public class EntryControl {
private Vector <Entry> entryList = new Vector <Entry> ();
public void addEntry(Entry e) throws EntryExistsException{
if (entryList.contains(e))
throw new EntryExistsException(e, "");
else
entryList.add(e);
}
public Vector<Entry> listAllEntry(){
return entryList;
}
//reference in main control class
public Vector<Entry> giveAllEntry(){
return entryControl.listAllEntry();
}
在setDataVector
方法中,没有将任何内容添加到rows
。 您可能要添加以下行:
rows.add(entryAsVector);
如果通过添加打印语句或使用调试器将rows
传递给this.setDataVector时检查了rows
的值,则可能自己发现了此问题。
TableModel类有点精神分裂症,它扩展了DefaultTableModel,该类已经具有自己的数据核,尽管如此,它却拥有自己的数据核entryList,而忽略了DefaultTableModel父类拥有的数据核。 您需要执行以下两项操作之一:使用您的entryList字段并扩展AbstractTableModel,或者摆脱它,并确保将数据传递到父DefaultTableModel的超级构造函数调用中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.