JButton deleteButton = new JButton("Delete Club"); deleteButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int selectedRow = clubTable.getSelectedRow(); if (selectedRow != -1) { int clubId = (int) clubTable.getValueAt(selectedRow, 0); deleteClub(clubId); refreshClubTable(); clearMemberTable(); } } });
时间: 2024-02-10 22:21:40 浏览: 26
这段代码创建了一个JButton实例对象deleteButton,用于显示"Delete Club"文本的按钮。接着,为该按钮添加了一个ActionListener监听器,用于监听按钮Action事件。当用户点击按钮时,会触Action事件,执行ActionListener中定义的actionPerformed()方法。
在这个例子中,actionPerformed()方法首先获取clubTable表格中当前选中的行数selectedRow。如果该值不为-1,说明用户已经选中了一行俱乐部信息。接着,代码从clubTable表格中获取选中行的第一列数据,即俱乐部的ID号clubId。然后调用deleteClub(clubId)方法,用于删除该俱乐部。接下来,调用refreshClubTable()方法,用于刷新俱乐部表格的数据。最后,调用clearMemberTable()方法,用于清空会员表格的数据。
这段代码的主要作用是实现删除俱乐部的功能,并在数据发生变化后刷新相关的表格数据。deleteClub()、refreshClubTable()和clearMemberTable()方法可能是自定义的方法,具体实现可能因应用而异。
相关问题
优化这段代码package com.daiinfo.catering.pane; import com.daiinfo.catering.util.JDBConnection; import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventListener; public class DishManagePane2 extends JFrame { private JTable table; private JButton addButton,updateButton,deleteButton; public DishManagePane2(){ setTitle("菜品管理"); setSize(800,600); String [] columnNames = {"菜品名","价格","菜品类别"}; Object[][] data = {{"糖醋排骨",29.0,"西餐"},{"宫保鸡丁",28.0,"中餐"}}; JTable table = new JTable(data,columnNames); addButton = new JButton("增加"); updateButton = new JButton("修改"); deleteButton = new JButton("删除"); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }); JPanel panel = new JPanel(new BorderLayout()); panel.add(new JScrollPane(table),BorderLayout.CENTER); JPanel buttonPanel = new JPanel(new FlowLayout()); buttonPanel.add(addButton); buttonPanel.add(updateButton); buttonPanel.add(deleteButton); panel.add(buttonPanel,BorderLayout.SOUTH); add(panel); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new JDBConnection(); new DishManagePane2(); } }
以下是对代码的优化:
1. 将 JTable、JButton 声明为类成员变量,方便后面的方法访问。
2. 将 JTable 中的数据从构造函数中移除,改为从数据库中读取,使用 JDBConnection 类进行数据库连接和查询。
3. 将按钮的 ActionListener 单独提取出来,作为类内部的一个私有方法。
4. 将 JFrame 窗口的设置移到单独的方法中,方便对窗口属性的修改和扩展。
优化后的代码如下:
```java
package com.daiinfo.catering.pane;
import com.daiinfo.catering.util.JDBConnection;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
public class DishManagePane2 extends JFrame {
private JTable table;
private JButton addButton, updateButton, deleteButton;
public DishManagePane2() {
setTitle("菜品管理");
setSize(800, 600);
setWindow();
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JScrollPane(table), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(addButton);
buttonPanel.add(updateButton);
buttonPanel.add(deleteButton);
panel.add(buttonPanel, BorderLayout.SOUTH);
add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void setWindow() {
addButton = new JButton("增加");
updateButton = new JButton("修改");
deleteButton = new JButton("删除");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 添加菜品的逻辑
}
});
// 从数据库中读取数据并绑定到 JTable 上
try {
Connection conn = JDBConnection.getConnection();
Statement stmt = conn.createStatement();
String sql = "select * from dishes";
ResultSet rs = stmt.executeQuery(sql);
Vector<Vector<Object>> data = new Vector<>();
while (rs.next()) {
Vector<Object> row = new Vector<>();
row.add(rs.getString("name"));
row.add(rs.getDouble("price"));
row.add(rs.getString("category"));
data.add(row);
}
Vector<String> columnNames = new Vector<>();
columnNames.add("菜品名");
columnNames.add("价格");
columnNames.add("菜品类别");
table = new JTable(data, columnNames);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new JDBConnection();
new DishManagePane2();
}
}
```
这样,代码就更加清晰、易于维护和扩展了。
帮我改写的能运行起来package com.swingtest; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class StudentManger extends JFrame implements ActionListener { JLabel lstname = new JLabel("学生姓名: "); JTextField tf_name = new JTextField(12); JLabel lmajor = new JLabel("专业"); JTextField tf_major = new JTextField(); JButton btnOK = new JButton("添加"); JButton btnDelete = new JButton("删除"); JButton btnQuit = new JButton("退出"); JTable table; DefaultTableModel model; public void studentManger(String name) { // TODO Auto-generated constructor stub JLabel welcome = new JLabel(name +",欢迎登录!"); setTitle("学生管理"); setSize(400,400); welcome.setBounds(50,20,200,20); lstname.setBounds(50,20,200,20); tf_name.setBounds(150,50,100,20); lmajor.setBounds(50,80,100,20); tf_major.setBounds(150,80,100,20); btnOK.setBounds(80,110,60,20); btnDelete.setBounds(150,110,60,20); btnQuit.setBounds(220,110,60,20); Container c = getContentPane(); JPanel panel = new JPanel(); panel.setLayout(null); panel.add(welcome); panel.add(lstname); panel.add(tf_name); panel.add(lmajor); panel.add(tf_major); panel.add(btnOK); panel.add(btnDelete); panel.add(btnQuit); String[] colName = {"姓名","专业"}; model = new DefaultTableModel(colName,0); table = new JTable(model); JScrollPane scrollPane = new JScrollPane(table); c.setLayout(new SpringLayout()); c.add(panel); c.add(scrollPane); setLocationRelativeTo(null); setVisible(true); btnOK.addActionListener(this); btnDelete.addActionListener(this); btnQuit.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Object ob = e.getSource(); if(ob == btnQuit) { System.exit(0); }else if(ob ==btnOK) { String[] stuInfo = {tf_name.getText(),tf_major.getText()}; model.addRow(stuInfo); tf_name.setText(""); tf_major.setText(""); }else if(ob == btnDelete) { if(table.getSelectedRow()<0) { JOptionPane.showMessageDialog(null,"请在表格中选中要删除的行");} else { model.removeRow(table.getSelectedRow()); } }} public static void main(String[] args) { new StudentManger(); } }
改写后的代码如下:
```java
package com.swingtest;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class StudentManager extends JFrame implements ActionListener {
private JLabel welcomeLabel;
private JLabel nameLabel;
private JTextField nameTextField;
private JLabel majorLabel;
private JTextField majorTextField;
private JButton addButton;
private JButton deleteButton;
private JButton quitButton;
private JTable table;
private DefaultTableModel model;
public StudentManager(String name) {
welcomeLabel = new JLabel(name + ",欢迎登录!");
nameLabel = new JLabel("学生姓名: ");
nameTextField = new JTextField(12);
majorLabel = new JLabel("专业");
majorTextField = new JTextField();
addButton = new JButton("添加");
deleteButton = new JButton("删除");
quitButton = new JButton("退出");
String[] colName = {"姓名", "专业"};
model = new DefaultTableModel(colName, 0);
table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
setTitle("学生管理");
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
welcomeLabel.setBounds(50, 20, 200, 20);
nameLabel.setBounds(50, 50, 100, 20);
nameTextField.setBounds(150, 50, 100, 20);
majorLabel.setBounds(50, 80, 100, 20);
majorTextField.setBounds(150, 80, 100, 20);
addButton.setBounds(80, 110, 60, 20);
deleteButton.setBounds(150, 110, 60, 20);
quitButton.setBounds(220, 110, 60, 20);
Container c = getContentPane();
JPanel panel = new JPanel();
panel.setLayout(null);
panel.add(welcomeLabel);
panel.add(nameLabel);
panel.add(nameTextField);
panel.add(majorLabel);
panel.add(majorTextField);
panel.add(addButton);
panel.add(deleteButton);
panel.add(quitButton);
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
c.add(panel);
c.add(scrollPane);
addButton.addActionListener(this);
deleteButton.addActionListener(this);
quitButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob = e.getSource();
if (ob == quitButton) {
System.exit(0);
} else if (ob == addButton) {
String[] stuInfo = {nameTextField.getText(), majorTextField.getText()};
model.addRow(stuInfo);
nameTextField.setText("");
majorTextField.setText("");
} else if (ob == deleteButton) {
if (table.getSelectedRow() < 0) {
JOptionPane.showMessageDialog(null, "请在表格中选中要删除的行");
} else {
model.removeRow(table.getSelectedRow());
}
}
}
public static void main(String[] args) {
new StudentManager("张三");
}
}
```
改写后的代码主要是对变量名和方法名进行规范化、重构,同时对布局管理器进行了修改,更加灵活。程序的功能并没有变化,仅仅是代码更加规范、易读。