已有101人关注
双击鼠标没弹出窗口
还有0人有此问题
发表在Java图书答疑 2021-03-17 《Java项目开发实战入门》第2章 通讯录系统 106页-107页
是否精华
版块置顶:
老师好,我在练习[通讯录系统]时,做到106页的2.2.6 给主窗体表格添加双击事件 时按照书本添加了鼠标双击监听
组件代码,但是运行后双击鼠标,没有弹出窗口,不知道怎么回事?检查了很多遍代码,没有错误,谢谢您

package frame;
import com.mr.contact.swing.ContactFrame;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import com.mr.contact.dao.Dao;
import com.mr.contact.dao.DaoFactory;
import com.mr.contact.swing.FixedTable;
import pojo.Customer;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/*
 * 主窗体
 */
public class MainFrame extends ContactFrame// 继承ContactFrame类
{
private Dao dao; // 数据库接口
private FixedTable table; // 通讯录表格
private DefaultTableModel tableModel; // 定义表格模型对象模型
/*
 * 构造方法
 */
public MainFrame() {
setTitle("通讯录系统"); // 窗体标题
init(); // 组件初始化
validate(); // 重新加载组件
addAction(); // 调用“开启组件监听”
}// MainFrame方法结束
/**
 * 添加组件监听
 */
private void addAction() {
table.addMouseListener(new MouseAdapter()// 表格添加鼠标事件监听
{
public void mouseClicked(MouseEvent e)// 当鼠标点击时
{
if (e.getClickCount() == 2)// 2代表鼠标双击,如果是双击事件
{ 
// 获得选中的第一列数据,赋值为ID
String id = (String) table.getValueAt(table.getSelectedRow(), 0);//0表示我选中的行的第一列
// 获取此ID的持久化客户信息对象
Customer cust = dao.selectCustomer(Integer.parseInt(id));
cust.setId(Integer.parseInt(id)); // 将ID值转成int值并赋给客户对象
// 打开详细信息展示窗体
ShowInfoFrame info = new ShowInfoFrame(cust, MainFrame.this);
//info.add(info);
info.setVisible(true); // 显示窗体
//info.setSize(400,400);
//info.setDefaultCloseOperation(EXIT_ON_CLOSE);
} // if结束
} // mouseClicked()结束
}); // addMouseListener()结束
} // addAction()结束
/*
 * 组件初始化
 */
protected void init() {
super.init(); // 调用父类init()方法
dao = DaoFactory.getDao(); // 实例化数据库接口
table = getTable(); // 创建指定表格模型的表格
table.setCellEditable(false); // 设置表格不可编辑
initTable(); // 初始化表格数据
}
/*
 * 初始化表格数据
 */
public void initTable() {
tableModel = getUsableModleSoure(); // 获取所有有效客户信息
table.setModel(tableModel); // 客户信息表格加载数据模型
} // initTable()结束了
/**
 * 查询所有有效客户信息
 * 
 * @param 表格数据模型
 */
private DefaultTableModel getUsableModleSoure() {
List<Customer> usableList = dao.selectUsableCustomer(); // 获取所有有效客户
return assembledModleSoure(usableList); // 返回所有有效客户表格数据模型
} // getUsableModelSource()结束了
/**
 * 根据不同的客户集合获取相应的表格数据模型
 * 
 * @param usableList - 客户集合
 * @return表格数据模型
 */
private DefaultTableModel assembledModleSoure(List<Customer> usableList) {
int customerCount = usableList.size(); // 获取集合的客户数量
String[] columnNames = { "编号", "姓名", "性别", "出生日期", "工作单位", "职位", "工作地点", "家庭住址" }; // 定义表格列名数组
String[][] tableValues = new String[customerCount][8]; // 创建表格数据数组
for (int i = 0; i < customerCount; i++) { // 遍历表格所有行
Customer cust = usableList.get(i); // 获取行用户对象
tableValues[i][0] = "" + cust.getId(); // 第一列为编号
tableValues[i][1] = cust.getName(); // 第二列为名称
tableValues[i][2] = cust.getSex(); // 第三列为性别
tableValues[i][3] = cust.getBirth(); // 第四列为出生日期
tableValues[i][4] = cust.getWork_unit(); // 第五列为公司名称
tableValues[i][5] = cust.getRole(); // 第六列为职位
tableValues[i][6] = cust.getWork_addr(); // 第七列为公司地址
tableValues[i][7] = cust.getHome_addr(); // 第八列为家庭地址
} // for结束
// 根据列名数组和数据数组创建表格数据模型
DefaultTableModel tmp = new DefaultTableModel(tableValues, columnNames);
return tmp;
} // assembledModleSoure()结束
/*
 * 主方法
 */
public static void main(String[] args)
{
new MainFrame(); // 将主窗体实例化
}
}

121.png


2021-03-17 13:01:58编辑
分享到:
精彩评论 2
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2021-03-18
沙发

计算机不会撒谎,运行不出正确结果就是有错。你可以参考章后“一起来找茬”这一节最后一个错误问题。

weixianfei
学分:79 LV3
2021-03-18
板凳

您好,我实在是没找到哪里有错,甚至直接复制书本资源附带的代码,都不行哦~非常郁闷

private void addAction() {
table.addMouseListener(new MouseAdapter() {// 表格添加鼠标事件监听
@Override
public void mouseClicked(MouseEvent e) {// 当鼠标点击时
if (e.getClickCount() == 2) {// 如果鼠标是双击事件
// 获得选中行的第一列数据,赋值为id
String id = (String) table.getValueAt(table.getSelectedRow(), 0);
// 获取此id的持久化客户信息对象
Customer cust = dao.selectCustomer(Integer.parseInt(id));
cust.setId(Integer.parseInt(id));// 将id值转成int值并赋给客户对象
// 打开详细信息展示窗体
ShowInfoFrame info = new ShowInfoFrame(cust, MainFrame.this);
info.setVisible(true);// 窗体可见
} // if结束
}// mouseClicked()结束
});// addMouseListener()结束
}// addAction()j结束
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照