Java 更新JTable中的项

Java 更新JTable中的项,java,swing,jtable,Java,Swing,Jtable,我已经成功地实现了一个JTable的add函数,但是我在更新时遇到了困难,因为当我调用更新时,我的字段是空的。如何引用选定的表项并从其列中提取数据。下面是我的代码 public class GUIMemos { Calendar calendar = Calendar.getInstance(); Date timeStamp = new java.sql.Timestamp(calendar.getTime().getTime()); private Frame frame = new Fra

我已经成功地实现了一个JTable的add函数,但是我在更新时遇到了困难,因为当我调用更新时,我的字段是空的。如何引用选定的表项并从其列中提取数据。下面是我的代码

public class GUIMemos {
Calendar calendar = Calendar.getInstance();
Date timeStamp = new java.sql.Timestamp(calendar.getTime().getTime());
private Frame frame = new Frame();
private DefaultTableModel tablemodel;
private Memos memos = new Memos();
private AddDialog add_dialog = new AddDialog(frame, true);



public GUIMemos()throws Exception{
}
public void init() {
final int WIDTH = 600, HEIGHT = 600;
frame.setBounds(10, 10, WIDTH, HEIGHT);
frame.setDivider((int) (HEIGHT * .4));
frame.setTitle("GUI Memos");

String[] column_names = {"id" , "timestamp" , "title",};
tablemodel = frame.setTableModel(column_names);

double[] column_widths = {10, 50, 40};  // percentages adding to 100
frame.setColumnWidths(column_widths);

load_table();
frame.setVisible(true);               // invoke the frame

frame.addListSelectionListener(new ListSelectionListener() {
  @Override
  @SuppressWarnings({"CallToThreadDumpStack"})
  public void valueChanged(ListSelectionEvent evt) {
    if (evt.getValueIsAdjusting()) {
      return;
    }
    int row = frame.getSelectedModelRow();
    int id = (Integer) tablemodel.getValueAt(row, 0);

    try {
      Memo memo = memos.fetch(id);
      //frame.setContentText(memo.toString()); // doesn't matter either way
     frame.setContentText(memo.getContent());
    }
    catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
  });

  add_dialog.setSize(500, 300);

  frame.addMenuAddActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent evt) {
    add_dialog.setTitle("Add Memo");
    add_dialog.setTitleText("");
    add_dialog.setContentText("");
    add_dialog.setVisible(true);
  }
  });


  add_dialog.addOKActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent evt) {

    String title = add_dialog.getTitleText().trim();
    String content = add_dialog.getContentText();
    Timestamp timeStamp =  new Timestamp(calendar.getTime().getTime());

    try {
      if (title.isEmpty()) {
        throw new Exception("cannot have empty title");
      }
      Memo memo = new Memo(title, timeStamp, content);
      int id = memos.insert(memo);
      tablemodel.addRow(new Object[]{id, title, timeStamp});
      add_dialog.setVisible(false);
    }
    catch (Exception x) {
      JOptionPane.showMessageDialog(frame, x.getMessage());
    }
    }
  });
frame.addMenuRemoveActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent evt){

    }
});
frame.addMenuUpdateActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent evt){

        String title = add_dialog.getTitleText();
        String content = add_dialog.getContentText();
        add_dialog.setTitle("Add Memo");
        add_dialog.setTitleText(title);
        add_dialog.setContentText(content);
        add_dialog.setVisible(true);
       }

});

add_dialog.addCancelActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent evt) {
    handle_add_cancel();
  }
});

add_dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

add_dialog.addWindowListener(new WindowAdapter() {
  @Override
  public void windowClosing(WindowEvent evt) {
    handle_add_cancel();
  }
});

}

@SuppressWarnings({"CallToThreadDumpStack"})
private void load_table() {
  try {
  for (Memo memo : memos.fetchAll()) {
    tablemodel.addRow(new Object[]{
        memo.getId(),
        memo.getTimeStamp(),
        memo.getTitle(),});
  }
}
catch (Exception e) {
  e.printStackTrace();
  System.exit(1);
}
}

 private void handle_add_cancel() {
if (add_dialog.getTitleText().trim().equals("")
  && add_dialog.getContentText().trim().equals("")) {

  add_dialog.setVisible(false);  // nothing of significance added
}
else {         // something is there: query the user
  String message = "Do you want to exit\nwithout adding ?";

  int response = JOptionPane.showOptionDialog(
    frame, message, null, JOptionPane.YES_NO_OPTION,
    JOptionPane.WARNING_MESSAGE, null,
    new String[]{"yes", "no"}, "no"
    );

  if (response == JOptionPane.YES_OPTION) {
    add_dialog.setVisible(false);
  }
}
}

@SuppressWarnings("CallToThreadDumpStack")
public static void main(String[] args) {
try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  new GUIMemos().init();
}
catch (Exception e) {
  e.printStackTrace();
}
}
}
如果我看对了

1) 您忘记定义:-)

然后

tablemodel = frame.setTableModel(column_names);
frame.setColumnWidths(column_widths);
2)
frame.setVisible(true)必须是GUI创建后的最后一行代码

3) 真的只有我知道你们班的回报是什么

Memo memo = memos.fetch(id);

4) 从

加载
JTable
的所有数据噢,如果问题仍然存在,您不能将应用程序简化到必要的最小值吗?
Memo memo = memos.fetch(id);