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());///去除多余的空格,确保其值与下拉框的值匹配
这样即使数据库中值的长度不同也不会出现异常