已有101人关注
java通讯录系统2.6.2给主窗体添加双击事件无法打开新窗口
发表在Java图书答疑 2019-11-02 《Java项目开发实战入门》第2章 通讯录系统 101页-108页
是否精华
版块置顶:
主窗体代码如下:

package frame;


import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

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.ContactFrame;

import com.mr.contact.swing.FixedTable;


import pojo.Customer;


public class Mainframe extends ContactFrame {

private Dao dao;

private FixedTable table;

private DefaultTableModel tableModle;


public Mainframe() {

setTitle("通讯录系统");

        init();//组件初始化

   validate();//重新加载组件

   addAction();//调用组件监听方法

   

}

private void addAction() {

table.addMouseListener(new MouseAdapter() {//表格添加鼠标事件监听

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);//窗体可见

}

}

});

}

protected void init() {

super.init();// 调用父类init()方法

dao = DaoFactory.getDao();// 实例化数据库接口

table = getTable(); // 创建指定表格模型的表格

table.setCellEditable(false);// 让表格不可编辑

initTable();// 初始化表格数据

}// init()结束


public void initTable() {

tableModle = getUsableModleSoure();// 获取所有有效客户信息

table.setModel(tableModle);// 客户信息表格加载数据模型


}


private DefaultTableModel getUsableModleSoure() {

List<Customer> usablelist = dao.selectUsableCustomer();// 获取所有有效客户

return assembledModleSource(usablelist);//返回所有有效客户表格数据模型


}

private DefaultTableModel assembledModleSource(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;

}


public static void main(String[] args) {

new Mainframe();

}

}

    






分享到:
精彩评论 4
聆听大自然的声音
学分:3622 LV11
2019-11-02
沙发

展示信息窗体如下:

package frame;


import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.List;


import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.table.DefaultTableModel;


import com.mr.contact.dao.Dao;

import com.mr.contact.dao.DaoFactory;

import com.mr.contact.swing.CustomerFrame;

import com.mr.contact.swing.FixedTable;


import pojo.Communication;

import pojo.Customer;


public class ShowInfoFrame extends CustomerFrame {


private Dao dao; // 数据库接口

private Mainframe frame;// 父窗体

private Customer cust;// 要展示信息的客户

private FixedTable table;// 通信信息表格

private JTextField nameText;// 姓名输入框

private JTextField workUnitText;// 工作单位输入框

private JTextField roleText;// 职位输入框

private JTextField workAddressText;// 工作地点输入框

private JTextField homeText;// 家庭地址输入框

private JTextField birthText;// 生日输入框

private JTextField sexText;// 性别输入框

private DefaultTableModel tableModel;// 通信信息表格数据模型


public ShowInfoFrame(Customer cust, JFrame frame) {

// 调用父类创建“展示”窗体的构造方法

super(frame, CustomerFrame.SHOW);

this.cust = cust;

this.frame = (Mainframe) frame;

setTitle("详细信息");

dao = DaoFactory.getDao();//实例化数据库接口对象


table = getTable();//获取窗体表格

table.setCellEditable(false);//表格不可编辑


tableModel = getTableModel();//获取窗体表格模型

initTbleModle();//初始化窗体表格数据


nameText = getNameText();//获取姓名输入框

nameText.setText(cust.getName());//姓名输入框展示客户名


sexText = getSexText();//获取性别输入框

sexText.setText(cust.getSex());//性别输入框展示客户性别


birthText = getBirthText();//获取生日输入框

if (null != cust.getBirth()) {//如果生日不为空

birthText.setText(cust.getBirth());//生日输入框展示客户生日

}


workUnitText = getWorkUnitText();//获取工作单位输入框

if (null != cust.getWork_unit()) {//如果工作单位不为空

workUnitText.setText(cust.getWork_unit());//工作单位输入框展示客户工作单位

}


roleText = getRoleText();//获取职位输入框

if (null != cust.getRole()) {//如果职位不为空

roleText.setText(cust.getRole());//职位输入框展示客户职位

}


workAddressText = getWorkAddressText();//获取工作地点输入框

if (null != cust.getWork_addr()) {//如果工作地点不为空

workAddressText.setText(cust.getWork_addr());//工作地点输入框展示客户工作地点

}


homeText = getHomeText();//获取家庭住址输入框

if (null != cust.getHome_addr()) {//如果家庭住址不为空

homeText.setText(cust.getHome_addr());//家庭住址输入框展示客服家庭住址

}


FlowLayout btnPanelLayout = new FlowLayout(FlowLayout.RIGHT);//右对齐流布局

JPanel btnPanel = new JPanel(btnPanelLayout);//采用流布局的按钮面板

getContentPane().add(btnPanel, BorderLayout.SOUTH);//按钮面板添加到


JButton btnNewButton = new JButton("关闭");//创建关闭按钮

btnPanel.add(btnNewButton);//按钮添加到按钮面板中

btnNewButton.addActionListener(new ActionListener() {//关闭按钮添加监听


public void actionPerformed(ActionEvent e) {//当点击时

dispose();//销毁窗体


}

});


}


private void initTbleModle() {

if(tableModel.getRowCount()>0) {//如果表格中行数大于0

tableModel.getDataVector().clear();//清空表数据

tableModel.fireTableDataChanged();//重新绘制表格数据

}

//获取所有要展示的客户的所有的通信信息

List<Communication> usablelist = dao.selectCustmerCommunicationUsable(cust);

//创建保存通信信息的字符串数组,用于给表格数据赋值

String [] tableValues = new String [5];

for(Communication com :usablelist) {//遍历通信信息集合

if(com.getAvailable().endsWith("Y")) {//如果是有效数据

tableValues[0]=""+com.getId();//记录id的字符串值

tableValues[1]=com.getOffice_phone();//记录办公电话

tableValues[2]=com.getMobile_phone();//记录移动电话

tableValues[3]=com.getEmail();//记录电子邮箱

tableValues[4]=com.getQq();//记录QQ

tableModel.addRow(tableValues);//表格数据模型添加一行记录

}

}

}


}



聆听大自然的声音
学分:3622 LV11
2019-11-02
板凳

报错如下:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 3"

at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

at java.base/java.lang.Integer.parseInt(Integer.java:638)

at java.base/java.lang.Integer.parseInt(Integer.java:770)

at frame.Mainframe$1.mouseClicked(Mainframe.java:37)

at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278)

at java.desktop/java.awt.Component.processMouseEvent(Component.java:6592)

at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)

at java.desktop/java.awt.Component.processEvent(Component.java:6354)

at java.desktop/java.awt.Container.processEvent(Container.java:2261)

at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4966)

at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2319)

at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)

at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4914)

at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4552)

at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4484)

at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2305)

at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)

at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)

at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)

at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97)

at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)

at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)

at java.base/java.security.AccessController.doPrivileged(Native Method)

at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)

at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)

at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)

at java.base/java.security.AccessController.doPrivileged(Native Method)

at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)

at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)

at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)

at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)

at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)

at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


聆听大自然的声音
学分:3622 LV11
2019-11-02
地板

请问老师该怎么解决,求助

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-11-02
4L

image.png

字符串无法转为数字,鼠标点击得到的是空格3,要么检查为什么会出现空格,要么给调用字符串的trim()方法去除空格

首页上一页 1 下一页尾页 4 条记录 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经营性网站备案信息 营业执照