Шустрый

Профиль
Группа: Участник
Сообщений: 100
Регистрация: 26.10.2010
Репутация: нет Всего: 0
|
Привет спецам по Джава Нужна ваша помощь. Есть база - - MySQL. GUI для доступа к таблицам. Цель: При нажатии какой либо кнопки - появляется таблица с данными. К примеру - при нажатии кнопки attendance - появляется таблица с колонками: student_number, unit_number, attendance_date, attended Я хочу добавить чекбоксы слева от колонки student_number для каждой строки, а также добавить 2 кнопки - UPDATE, DELETE под строками. при чекинге одной строки - кнопки UPDATE, DELETE становятся доступными (в зависемости от Роли пользователя - роль так и не смог создать я), 2 чекинга невозможно было сделать. Пож-та помогите. Если кто с таким раньше сталкивался. 1-код: authrorize3.java| Код | package test; import test.DatabaseTableModel;
public class authorize3 extends javax.swing.JFrame { private JPanel read_panel; private JLabel conn_user; public JLabel conn_database_value; private JButton t9_xxx; private JButton t8_xxx; private JButton t7_unit; private JButton t6_student; private JButton t5_staff; //private JButton t6_student; private JButton t4_result; private JButton t3_department; private JButton t2_course; private JButton t1_attendance; private JPanel table_panel; private JLabel user_role_value; public JLabel conn_user_value; private JLabel conn_user_role; private JLabel conn_database;
private String dbAccount_value_auth2; public String dbURL_value_auth2; public String passw_auth2; public Connection conn_auth2;
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { authorize3 inst = new authorize3(); //inst.setLocationRelativeTo(null); inst.setVisible(true); } }); } public authorize3() { super(); initGUI(); } private void initGUI() { try { setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); this.setTitle("Please select tables"); authorize1 auth1 = new authorize1(); // { read_panel = new JPanel(); getContentPane().add(read_panel, BorderLayout.NORTH); GroupLayout read_panelLayout = new GroupLayout((JComponent)read_panel); read_panel.setLayout(read_panelLayout); read_panel.setPreferredSize(new java.awt.Dimension(392, 90)); { conn_user = new JLabel(); GroupLayout conn_userLayout = new GroupLayout((JComponent)conn_user); conn_user.setLayout(conn_userLayout); conn_user.setText("Connected User:"); conn_user.setRequestFocusEnabled(false); conn_userLayout.setAutoCreateContainerGaps(true); conn_userLayout.setVerticalGroup(conn_userLayout.createParallelGroup()); conn_userLayout.setHorizontalGroup(conn_userLayout.createParallelGroup()); } { //authorize2 auth2 = new authorize2(); conn_user_value = new JLabel(); //conn_user_value.setText(get_db_account()); //System.out.println("Last: " + dbAccount_value_auth2); } { //JLabel conn_db = new JLabel(); conn_database_value = new JLabel(); //conn_database_value.setText(dbURL_value); //conn_database_value.setText(auth1.db_select_value.toString()); //System.out.println("Authorize 2 class: "+ auth1.user_variable_value + " "+ auth1.db_variable_value); } { user_role_value = new JLabel(); user_role_value.setText("Role_XXX"); } { conn_database = new JLabel(); GroupLayout conn_databaseLayout = new GroupLayout((JComponent)conn_database); conn_database.setLayout(null); conn_database.setText("Database:"); conn_databaseLayout.setAutoCreateContainerGaps(true); conn_databaseLayout.setVerticalGroup(conn_databaseLayout.createParallelGroup()); conn_databaseLayout.setHorizontalGroup(conn_databaseLayout.createParallelGroup()); } { conn_user_role = new JLabel(); conn_user_role.setText("User Role:"); } read_panelLayout.setHorizontalGroup(read_panelLayout.createSequentialGroup() .addContainerGap() .addGroup(read_panelLayout.createParallelGroup() .addComponent(conn_user_role, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE) .addComponent(conn_database, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE) .addComponent(conn_user, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)) .addGroup(read_panelLayout.createParallelGroup() .addGroup(read_panelLayout.createSequentialGroup() .addComponent(user_role_value, GroupLayout.PREFERRED_SIZE, 130, GroupLayout.PREFERRED_SIZE)) .addGroup(read_panelLayout.createSequentialGroup() .addComponent(conn_database_value, GroupLayout.PREFERRED_SIZE, 130, GroupLayout.PREFERRED_SIZE)) .addGroup(read_panelLayout.createSequentialGroup() .addComponent(conn_user_value, GroupLayout.PREFERRED_SIZE, 130, GroupLayout.PREFERRED_SIZE))) .addContainerGap(137, Short.MAX_VALUE)); read_panelLayout.setVerticalGroup(read_panelLayout.createSequentialGroup() .addContainerGap() .addGroup(read_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(conn_user_value, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE) .addComponent(conn_user, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 0, Short.MAX_VALUE) .addGroup(read_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(conn_database_value, GroupLayout.Alignment.BASELINE, 0, 16, Short.MAX_VALUE) .addComponent(conn_database, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(read_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(conn_user_role, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE) .addComponent(user_role_value, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(19, 19)); } { table_panel = new JPanel(); getContentPane().add(table_panel, BorderLayout.CENTER); GroupLayout table_panelLayout = new GroupLayout((JComponent)table_panel); table_panel.setLayout(table_panelLayout); table_panel.setPreferredSize(new java.awt.Dimension(392, 89)); { t1_attendance = new JButton(); t1_attendance.setText("attendance"); t1_attendance.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { try{ Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/student_courses", "root", "qaz" ); Statement st = con.createStatement(); //ResultSet rs = st.executeQuery("select staff_number, forename, surname, date_of_birth from staff"); ResultSet rs = st.executeQuery("select * from attendance"); DatabaseTableModel model = new DatabaseTableModel(); model.setDataSource(rs); JTable table = new JTable(model); JPanel panel = new JPanel(new BorderLayout()); panel.add(new JScrollPane(table), BorderLayout.CENTER); JFrame frame_DTM = new JFrame("Database Table Model"); frame_DTM.setLocationRelativeTo(null); frame_DTM.setSize(500, 400); frame_DTM.setContentPane(panel); frame_DTM.setVisible(true); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}); } { t2_course = new JButton(); t2_course.setText("course"); } { t4_result = new JButton(); t4_result.setText("result"); } { t5_staff = new JButton(); t5_staff.setText("staff"); } { t3_department = new JButton(); t3_department.setText("department"); } { t7_unit = new JButton(); t7_unit.setText("unit"); } { t8_xxx = new JButton(); t8_xxx.setText("table 8 x"); } { t9_xxx = new JButton(); t9_xxx.setText("table 9 x"); } { t6_student = new JButton(); t6_student.setText("student"); } table_panelLayout.setHorizontalGroup(table_panelLayout.createSequentialGroup() .addContainerGap() .addGroup(table_panelLayout.createParallelGroup() .addComponent(t2_course, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 115, GroupLayout.PREFERRED_SIZE) .addComponent(t1_attendance, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 115, GroupLayout.PREFERRED_SIZE) .addComponent(t3_department, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 115, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(table_panelLayout.createParallelGroup() .addComponent(t6_student, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 117, GroupLayout.PREFERRED_SIZE) .addComponent(t4_result, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 117, GroupLayout.PREFERRED_SIZE) .addComponent(t5_staff, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 117, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(table_panelLayout.createParallelGroup() .addComponent(t7_unit, GroupLayout.Alignment.LEADING, 0, 119, Short.MAX_VALUE) .addComponent(t8_xxx, GroupLayout.Alignment.LEADING, 0, 119, Short.MAX_VALUE) .addComponent(t9_xxx, GroupLayout.Alignment.LEADING, 0, 119, Short.MAX_VALUE)) .addGap(7)); table_panelLayout.setVerticalGroup(table_panelLayout.createSequentialGroup() .addContainerGap() .addGroup(table_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(t4_result, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(t1_attendance, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(t7_unit, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(table_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(t5_staff, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 26, GroupLayout.PREFERRED_SIZE) .addComponent(t2_course, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE) .addComponent(t8_xxx, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(table_panelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(t6_student, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE) .addComponent(t3_department, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE) .addComponent(t9_xxx, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, 26, GroupLayout.PREFERRED_SIZE)) .addContainerGap(81, 81)); } pack(); setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } catch (Exception e) { //add your error handling code here e.printStackTrace(); } } }
|
2-ой код: DatabaseTableModel.java | Код | package test;
public class DatabaseTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private ArrayList<String> columnNames = new ArrayList<String>(); private ArrayList<Class> columnTypes = new ArrayList<Class>(); private ArrayList<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>(); public int getRowCount() { synchronized (data) { return data.size(); } } public int getColumnCount() { return columnNames.size(); } public Object getValueAt(int row, int col) { synchronized (data) { return data.get(row).get(col); } } public String getColumnName(int col) { return columnNames.get(col); } public Class getColumnClass(int col) { return columnTypes.get(col); } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object obj, int row, int col) { synchronized (data) { data.get(row).set(col, obj); } } public void setDataSource(ResultSet rs) throws SQLException, ClassNotFoundException { ResultSetMetaData rsmd = rs.getMetaData(); columnNames.clear(); columnTypes.clear(); data.clear(); int columnCount = rsmd.getColumnCount(); for (int i = 0; i < columnCount; i++) { columnNames.add(rsmd.getColumnName(i + 1)); Class type = Class.forName(rsmd.getColumnClassName(i + 1)); columnTypes.add(type); } fireTableStructureChanged(); while (rs.next()) { ArrayList rowData = new ArrayList(); for (int i = 0; i < columnCount; i++) { if (columnTypes.get(i) == String.class) rowData.add(rs.getString(i + 1)); else rowData.add(rs.getObject(i + 1)); } synchronized (data) { data.add(rowData); this.fireTableRowsInserted(data.size() - 1, data.size() - 1); } } } }
|
Добавлено через 2 минуты и 20 секунд1) добавьте DBurl, DBaccount, DBpassword - статически 2) ну и вас должна быть база по MySQL. скрипт создания таблицы attendance: CREATE TABLE `attendance` ( `student_number` char(8) NOT NULL, `unit_number` char(6) NOT NULL, `attendance_date` date NOT NULL, `attended` char(1) NOT NULL, PRIMARY KEY (`student_number`,`unit_number`,`attendance_date`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;3) внесение данных в attendance: INSERT INTO `attendance` VALUES ('L0001145','U00313','2004-05-04','A'),('L0001145','U00333','2004-05-03','A'),('L0001234','U00313','2004-05-04','P'),('L0001234','U00333','2004-05-03','A'),('L0002113','U00413','2004-05-03','P'),('L0002113','U00443','2004-05-03','A'),('L0002243','U00213','2004-05-03','P'),('L0002243','U00223','2004-05-05','P'),('L0002243','U00233','2004-05-04','A'),('L0002323','U00313','2004-05-03','A'),('L0002323','U00333','2004-05-04','A'),('L0003234','U00665','2004-05-03','A'),('L0003322','U00121','2004-05-03','A'),('L0003322','U00125','2004-05-04','P'),('L0003322','U00127','2004-05-05','A'),('L0003322','U00165','2004-05-06','A'),('L0003541','U00712','2004-05-03','P'),('L0003541','U00773','2004-05-03','P'),('L0006452','U00665','2004-05-03','P'),('L0007632','U00573','2004-05-03','P'),('L0007632','U00575','2004-05-04','A');
|