?? 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 + -