JComboBox与数据库字段匹配的怪事

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.ResultSet;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;

import com.OA.Dao.ResultSetTableModel;
import com.OA.Dao.dbsql;

public class myJournal extends JInternalFrame {
 private JTable table_show;
 private JTextField Ttitle;
 private JTextArea Tcontent;
 private JTextField Tdate;
 private JComboBox Jclass;
 private ResultSetTableModel model;
 private ResultSet rs;
 private dbsql db;
 private JPanel panel_show;
 private JScrollPane scrollPane_show;

 public myJournal(String title, boolean a, boolean b, boolean c, boolean d) {
  super(title, a, b, c, d);
  getContentPane().setLayout(null);
  setBounds(100, 100, 800, 600);
  this.resizable = false;// 大小不可变

  /**
   * 编辑
   */
  final JPanel pane_edit = new JPanel();
  pane_edit.setLayout(null);
  pane_edit.setBounds(10, 340, 770, 215);
  getContentPane().add(pane_edit);

  Border etched2 = BorderFactory.createEtchedBorder();
  Border titled2 = BorderFactory.createTitledBorder(etched2, "日志编辑");
  pane_edit.setBorder(titled2);

  final JLabel label = new JLabel();
  label.setText("日志类型:");
  label.setBounds(10, 31, 66, 18);
  pane_edit.add(label);

  Jclass = new JComboBox();
  Jclass.setAutoscrolls(true);
  Jclass.setModel(new DefaultComboBoxModel(
    new String[] { "工作日志", "个人日志" }));

  Jclass.setBounds(71, 28, 85, 25);
  pane_edit.add(Jclass);

  final JLabel label_1 = new JLabel();
  label_1.setText("日   期:");
  label_1.setBounds(180, 31, 66, 18);
  pane_edit.add(label_1);

  Tdate = new JTextField();
  Tdate.setBounds(229, 29, 137, 22);
  pane_edit.add(Tdate);

  final JScrollPane scrollPane_1 = new JScrollPane();
  scrollPane_1.setBounds(10, 55, 750, 114);
  pane_edit.add(scrollPane_1);

  Tcontent = new JTextArea();
  scrollPane_1.setViewportView(Tcontent);

  final JButton button = new JButton();
  button.addActionListener(new ActionListener() {
   public void actionPerformed(final ActionEvent e) {
    add();
   }
  });
  button.setText("添加");
  button.setBounds(71, 175, 106, 28);
  pane_edit.add(button);

  final JButton button_1 = new JButton();
  button_1.addActionListener(new ActionListener() {
   public void actionPerformed(final ActionEvent e) {
    edit();
   }
  });
  button_1.setText("修改");
  button_1.setBounds(235, 175, 106, 28);
  pane_edit.add(button_1);

  final JButton button_2 = new JButton();
  button_2.setText("删除");
  button_2.setBounds(409, 175, 106, 28);
  pane_edit.add(button_2);

  final JButton button_3 = new JButton();
  button_3.setText("查询");
  button_3.setBounds(586, 175, 106, 28);
  pane_edit.add(button_3);

  Ttitle = new JTextField();
  Ttitle.setBounds(466, 29, 206, 22);
  pane_edit.add(Ttitle);

  final JLabel label_2 = new JLabel();
  label_2.setText("标   题:");
  label_2.setBounds(394, 31, 66, 18);
  pane_edit.add(label_2);

  tableshow(); // 显示日志
 }

 private void tableshow() {
  db = new dbsql();
  db.connect();
  String sql = "Select 分类=Jlb,标题=Jtitle,内容=Jcontent,创建日期=Jdate from Journal order by JID desc";
  rs = db.query(sql);

  model = new ResultSetTableModel(rs);

  panel_show = new JPanel();
  panel_show.setLayout(new BorderLayout());
  panel_show.setBounds(10, 10, 770, 324);
  getContentPane().add(panel_show);

  Border etched = BorderFactory.createEtchedBorder();
  Border titled = BorderFactory.createTitledBorder(etched, "日志浏览");
  panel_show.setBorder(titled);

  scrollPane_show = new JScrollPane();
  panel_show.add(scrollPane_show, BorderLayout.CENTER);

  table_show = new JTable(model);
  table_show.addMouseListener(new MouseAdapter() {
   public void mouseClicked(final MouseEvent arg0) {
    int row = table_show.getSelectedRow(); // 获得当前选中的行号
    Jclass.setSelectedItem(model.getValueAt(row, 0)); //给下拉框选择对应的值
    Ttitle.setText(model.getValueAt(row, 1).toString()); // 标题
    Tcontent.setText(model.getValueAt(row, 2).toString()); // 内容
    Tdate.setText(model.getValueAt(row, 3).toString()); // 日期    Ttitle.setText(model.getValueAt(row, 1).toString()); // 标题
    Tcontent.setText(model.getValueAt(row, 2).toString()); // 内容
    Tdate.setText(model.getValueAt(row, 3).toString()); // 日期
   }
  });
  scrollPane_show.setViewportView(table_show);
 }

 /**
  * 新增日志
  */
 private void add() {
  String Clb = (String) Jclass.getSelectedItem();
  String title = Ttitle.getText();
  String d = Tdate.getText();
  String content = Tcontent.getText();
  dbsql db = new dbsql();
  db.connect();
  String sql = "insert into Journal (Jtitle,Jlb,Jdate,Jcontent) values('"
    + title + "','" + Clb + "','" + d + "','" + content + "')";
  db.update(sql);
  db.close();
  getContentPane().remove(panel_show); // 移除当前面板
  tableshow(); // 调用显示日志
 }}

上面是修改前的代码,代码本身无任何异常,但是运行时,下拉框的值不会根据对应表格的值而改变,折腾半天未果,后来发现,其实是数据库中的值多了些空格,虽然读取的值是没错,但是由于长度与下拉框的值不完全匹配,所以出现无法动态同步问题,,因为初始值是我在数据库中手动输入的,数据库中字段定为20个单位长度,因而产生多余的空格.解法如下:

1.数据库中设定长度为最小值,这里只有两项,且都是4个中文字符,设长度为8较为合理.

2.在java中加入一段修正代码:(上面红色部分改为如下代码)

String cs=(model.getValueAt(row, 0)).toString();//读取sql中的字段
    Jclass.setSelectedItem(cs.trim());///去除多余的空格,确保其值与下拉框的值匹配

这样即使数据库中值的长度不同也不会出现异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值