📄 teaminputjframe.java
字号:
//13.1 输入并分类浏览参赛队信息。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.sql.*;
public class TeamInputJFrame extends JFrame implements ActionListener, ListSelectionListener
{
private DataBaseOperation dboper; //操纵数据库的对象
private String table; //数据库中的表名
private String[] columnNames; //指定表中所有列的中文标题
private String list_column; //指定分类浏览依据的列
private String sort_column; //指定排序依据的列
private JList list_group; //列表框,显示分类列的不重复值
// private DefaultListModel listModel; //默认列表框模式
private JTable table_team; //表格组件,显示数据库中指定的内容
private DefaultTableModel tableModel; //默认表格模式
private JComboBox combobox_group; //组合框,选择组别
private JTextField text_team; //文本行,输入参赛队名
public TeamInputJFrame(DataBaseOperation dboper, String table, String[] columnNames, String list_column, String sort_column) //构造方法,指定表名
{
this.dboper = dboper;
this.table = table;
this.columnNames = columnNames;
this.list_column = list_column;
this.sort_column = sort_column;
this.setSize(480,320); //界面设计
this.setLocation(300,240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JSplitPane splitter_h = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); //分割窗格,水平分割
this.add(splitter_h);
JSplitPane splitter_v = new JSplitPane(JSplitPane.VERTICAL_SPLIT); //分割窗格,垂直分割
try
{
String[] groupdata = dboper.selectDistinct(table, list_column); //获得指定列不重复的值
this.list_group = new JList(groupdata);
// this.listModel = new DefaultListModel(); //默认列表框模式
// dboper.selectDistinct(this.table, this.list_column, this.listModel); //获得指定列不重复的值
// this.list_group = new JList(listModel);
this.list_group.setSelectedIndex(0); //选中第1项
splitter_h.add(new JScrollPane(this.list_group));
this.list_group.addListSelectionListener(this); //注册选择事件监听器
splitter_h.add(splitter_v);
this.tableModel = new DefaultTableModel(columnNames,0); //默认表格模式
this.valueChanged(null); //执行列表框的选择事件处理程序
this.table_team = new JTable(tableModel);
// this.table_team.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
splitter_v.add(new JScrollPane(table_team));
}
catch(Exception e)
{
e.printStackTrace();
}
splitter_v.add(inputJPanel());
this.setVisible(true);
}
private JPanel inputJPanel()
{
JPanel panel = new JPanel();
panel.add(new JLabel("组别"));
String[] groupdata = {"A","B","C","D","E","F","G","H"};
combobox_group = new JComboBox(groupdata);
panel.add(combobox_group);
panel.add(new JLabel("队名"));
text_team = new JTextField(10);
panel.add(text_team);
JButton button_add = new JButton("添加");
panel.add(button_add);
button_add.addActionListener(this);
return panel;
}
public void display(String columnValue)
{
String conditions="";
if(columnValue!=null && !columnValue.equals("全部"))
conditions = this.list_column + " = '"+columnValue+"'";
try
{
dboper.select(this.table, conditions, sort_column, this.tableModel); //查询并显示指定组的数据结果集
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
}
public void valueChanged(ListSelectionEvent e) //在列表框中选择数据项时触发
{ //在表中查询指定组的数据,将数据结果集显示在表格组件中
String selecteditem = (String)list_group.getSelectedValue();
if(selecteditem!=null)
display(selecteditem);
}
public void actionPerformed(ActionEvent e) //单击事件处理程序
{
if(e.getActionCommand()=="添加") //单击按钮时
{
String group1 = (String)combobox_group.getSelectedItem();
Object group1obj = combobox_group.getSelectedItem();
String team1 = text_team.getText();
if (team1.equals(""))
{
System.out.println("队名为空,不能添加。");
return;
}
try
{
this.list_group.setSelectedValue(group1obj,true);// ??不起作用??
System.out.println(list_group.getSelectedIndex());
display(group1);
String sql = "SELECT COUNT(" +list_column +") FROM "+this.table;
sql += " WHERE "+list_column+"='"+group1+"'";
int count = dboper.selectCount(sql);
if (count>=4)
{
System.out.println(group1+"组已有4个队,不能再添加。");
return;
}
sql = "SELECT COUNT(" +list_column +") FROM "+this.table;
sql += " WHERE "+list_column+"='"+group1+"'";
sql += " AND team1='"+team1+"'";
System.out.println(sql);
count = dboper.selectCount(sql);
if (count>=1)
{
System.out.println(group1+"组已有"+team1+"队,不能再添加。");
return;
}
sql = "INSERT INTO " + this.table + " VALUES ('"; //表名
sql += group1+"', '"+ team1+"')"; //组别、队名列值
// System.out.println(sql);
int ok = dboper.dataUpdate(sql); //表中插入一行数据
if (ok==1)
{
// dboper.selectDistinct(this.table, this.list_column, this.listModel); //获得指定列不重复的值
String[] groupdata = dboper.selectDistinct(table, list_column); //获得指定列不重复的值
this.list_group.setListData(groupdata);
this.list_group.setSelectedValue((Object)group1,true);//选中指定数据项 ??不起作用??
display(group1);
}
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
}
}
public static void main(String args[])
{
String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WorldCup2006";
try
{
DataBaseOperation dboper = new DataBaseOperation(driver,url,"sa","yeheya");
String[] team_columnNames={"组别","球队"};
TeamInputJFrame team_input = new TeamInputJFrame(dboper,"Team", team_columnNames, "group1", "group1");
team_input.setTitle("第18届世界杯足球赛 参赛队");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
/*
icon_jack = new ImageIcon("国旗\\jack_s_german.gif");
JLabel label_jack = new JLabel("国旗", icon_jack, JLabel.RIGHT);
panel.add(label_jack);
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -