10. 9. 1. 丑陋的表 Create a thread to update Swing

本文介绍了一个使用Java Swing创建的简单桌面时钟应用程序。该应用利用了SimpleDateFormat类来格式化当前时间,并通过Swing组件实现实时更新显示。文章提供了完整的源代码示例。

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import javax.swing.JFrame; import javax.swing.JPanel; public class Clock extends JPanel implements Runnable{ Thread thread = null; //SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。 SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault()); Date currentDate;//这个时间是 java.util.Date int xcenter = 100, ycenter = 100, lastxs = 0, lastys = 0, lastxm = 0, lastym = 0, lastxh = 0, lastyh = 0; private void drawStructure(Graphics g){//画这个表圆,表针 g.setFont(new Font("TimesRoman", Font.PLAIN, 14)); g.setColor(Color.blue); g.drawOval(xcenter-50, ycenter-50, 100, 100); g.setColor(Color.DARK_GRAY); g.drawString("9", xcenter - 45, ycenter + 3); g.drawString("3", xcenter + 40, ycenter + 3); g.drawString("12", xcenter - 5, ycenter - 37);//这几个位置好难弄 g.drawString("6", xcenter - 3, ycenter + 45); } public void paint(Graphics g){ int xhour, yhour, xminute, yminute, xsecond, ysecond, second, minute, hour; drawStructure(g); currentDate = new Date(); formatter.applyPattern("s"); second = Integer.parseInt(formatter.format(currentDate)); formatter.applyPattern("m"); minute = Integer.parseInt(formatter.format(currentDate)); formatter.applyPattern("h"); hour = Integer.parseInt(formatter.format(currentDate)); xsecond = (int) (Math.cos(second * 3.14f / 30 - 3.14f / 2) * 45 + xcenter); ysecond = (int) (Math.sin(second * 3.14f / 30 - 3.14f / 2) * 45 + ycenter); xminute = (int) (Math.cos(minute * 3.14f / 30 - 3.14f / 2) * 40 + xcenter); yminute = (int) (Math.sin(minute * 3.14f / 30 - 3.14f / 2) * 40 + ycenter); xhour = (int) (Math.cos((hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) * 30 + xcenter); yhour = (int) (Math.sin((hour * 30 + minute / 2) * 3.14f / 180 - 3.14f / 2) * 30 + ycenter); // Erase if necessary, and redraw g.setColor(Color.lightGray); if (xsecond != lastxs || ysecond != lastys) { g.drawLine(xcenter, ycenter, lastxs, lastys); } if (xminute != lastxm || yminute != lastym) { g.drawLine(xcenter, ycenter - 1, lastxm, lastym); g.drawLine(xcenter - 1, ycenter, lastxm, lastym); } if (xhour != lastxh || yhour != lastyh) { g.drawLine(xcenter, ycenter - 1, lastxh, lastyh); g.drawLine(xcenter - 1, ycenter, lastxh, lastyh); } g.setColor(Color.darkGray); g.drawLine(xcenter, ycenter, xsecond, ysecond); g.setColor(Color.red); g.drawLine(xcenter, ycenter - 1, xminute, yminute); g.drawLine(xcenter - 1, ycenter, xminute, yminute); g.drawLine(xcenter, ycenter - 1, xhour, yhour); g.drawLine(xcenter - 1, ycenter, xhour, yhour); lastxs = xsecond; lastys = ysecond; lastxm = xminute; lastym = yminute; lastxh = xhour; lastyh = yhour; } public void start(){ if(thread == null){ thread = new Thread(this); thread.start(); } } public void stop(){ thread = null; } public void run() { while(thread != null){ try{ Thread.sleep(100); }catch(InterruptedException e){ } repaint(); } thread = null; } public void update(Graphics g){ paint(g); } public static void main(String[] args) { JFrame window = new JFrame("我是一只丑陋的表"); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setBounds(30, 30, 300, 300); Clock clock = new Clock(); window.getContentPane().add(clock); window.setVisible(true); clock.start(); } }


public ResultSet update(Connection conn,User user)throws Exception{ String sql="update user set username=?,password=?,sex=?,phone=? where id=?"; JdbcPreparedStatement pstmt=(JdbcPreparedStatement) conn.prepareStatement(sql); pstmt.setString(1, user.getUsername()); pstmt.setString(2, user.getPassword()); pstmt.setString(3, user.getSex()); pstmt.setString(4, user.getPhone()); pstmt.setInt(5, user.getUserid()); return pstmt.executeQuery();Can not issue data manipulation statements with executeQuery(). at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61) at com.mysql.cj.jdbc.StatementImpl.checkForDml(StatementImpl.java:390) at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:977) at cn.itcast.bookmanager.Dao.UserDAO.update(UserDAO.java:75) at cn.itcast.bookmanager.JFrame.AdminUserMng.UserDate(AdminUserMng.java:345) at cn.itcast.bookmanager.JFrame.AdminUserMng$5.actionPerformed(AdminUserMng.java:248) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:262) at java.awt.Component.processMouseEvent(Component.java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
06-24
java.sql.SQLSyntaxErrorException: Table 'library.borrow_records' doesn't exist at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:990) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1168) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1103) at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1450) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1086) at service.BorrowReturnManage.borrowBook(BorrowReturnManage.java:60) at ui.LibrarySystemUI.lambda$initBorrowBookPanel$1(LibrarySystemUI.java:689) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6576) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3404) at java.desktop/java.awt.Component.processEvent(Component.java:6341) at java.desktop/java.awt.Container.processEvent(Container.java:2260) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4958) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2318) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4790) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4916) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4559) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4500) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2304) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2671) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4790) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:725) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:702) 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)
06-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值