window class, OO

Wndows中Window Management 的设计
是很符合OO思想。

首先每个Window的定义由WNDCLASS结构定义。在WNDCLASS中我们需要给出
Window class name, Window的class style, 以及Wndow Procedure,WNDCLASS还提供了申请
extra class bytes 和extra window byte的能力。这两个空间可以类比的理解为class static fields和
object fields。和一般的class定义一样,WNDCLASS结构定义了Window对象的状态和行为。
这样凡是同类的Window不论它的位置,大小以及窗口属性如何都可以使用同一个WNDCLASS.
而对于行为有所不同的Window我们亦可以通过Sub-classing的方式通过改变其中一些消息
的行为得到所需的效果,这个方式事实上等同于override virtual method了,当然还有super-classing的说法。
每一个WNDCLASS在使用之前必须先注册到Win32 User Module中,随后用户即可使用CreateWindow创建Window实例了,值得注意的是在CreateWindow是我们并不是获取该WNDCLASS结构的指针来说明所使用的WNDCLASS的,而是通过Window class name, 如果将这些API在C#里面重写一下就可以看到一个很熟悉的设计。
class WindowManager
{
     public static void RegisterWindowClass(WindowClass wc);
     public static IWindow CreateWindow(string windowClassName, CreateWindowParameters params);
     //...
}
没错,Factory method, 事实上我们也正是靠这个方式重用了Common Controls.
这里我将返回的HWND写成IWindow接口,因为我觉得hwnd对于一系列Window function就如同this指针对于成员方法一般。hwnd应该被认为是C函数中的this指针,而不是Window对象的私有数据成员,事实上Window对象的数据封装做的非常到位,没有暴露出一个内部数据结构。
思路断掉了,以后再写。。。

转载于:https://www.cnblogs.com/jonnyyu/archive/2005/08/23/220550.html

import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; public class demo { public static void main(String[] args) throws RuntimeException { JFrame jFrame=new JFrame("登录窗口"); JLabel oo=new JLabel("账号",JLabel.CENTER); JLabel qq=new JLabel("密码",JLabel.CENTER); JTextField ii = new JTextField(10); JPasswordField kk = new JPasswordField(10); JButton mm=new JButton("确定"); JButton ss=new JButton("注册"); JPanel p=new JPanel(); p.setLayout(new GridLayout(3,2)); JPanel p1=new JPanel(); p1.add(oo); p1.add(ii); JPanel p2=new JPanel(); p2.add(qq); p2.add(kk); JPanel p3=new JPanel(); p3.add(mm); p3.add(ss); p.add(p1); p.add(p2); p.add(p3); jFrame.setSize(400,300); jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE); jFrame.setVisible(true); jFrame.add(p); ss.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { demo d=new demo(); d.pp(p1,p2); } }); } public void pp(JPanel i, JPanel name){ try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection configuration= DriverManager.getConnection("jdbc:mysql://localhost:3306/xscj?db_student","root","123456"); Statement system=configuration.createStatement(); String sql=("insert into opop values("+i +","+"'"+name+"')"); system.executeUpdate(sql); String ll="select * from opop"; ResultSet set=system.executeQuery(ll); while(set.next()){ String id =set.getString("ID"); String pp=set.getString("name"); System.out.println(id+pp); } System.out.println(" "); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } } public void uu(){ } }优化这段代码
最新发布
05-31
以下是对代码进行优化的建议: 1. 将`demo`这个类重命名为更具描述性的类名,比如`LoginWindow`。 2. 将所有的Swing组件创建和UI布局放在一个独立的方法里,如`createUI()`,然后在主方法中调用该方法。这样可以提高代码的可读性和可维护性。 3. 避免在主线程中进行数据库操作。应该将数据库操作放在单独的线程中,以免阻塞UI线程,导致用户体验不佳。 4. 将数据库操作封装在独立的类中,比如`DatabaseHelper`,以提高代码的可重用性和可维护性。 5. 在处理异常时,应该将异常抛出或记录到日志中,而不是简单地抛出`RuntimeException`。 下面是优化后的代码示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class LoginWindow { private JTextField accountTextField; private JPasswordField passwordField; public static void main(String[] args) { LoginWindow loginWindow = new LoginWindow(); loginWindow.createUI(); } private void createUI() { JFrame jFrame = new JFrame("登录窗口"); JLabel accountLabel = new JLabel("账号", JLabel.CENTER); JLabel passwordLabel = new JLabel("密码", JLabel.CENTER); accountTextField = new JTextField(10); passwordField = new JPasswordField(10); JButton loginButton = new JButton("确定"); JButton registerButton = new JButton("注册"); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(3, 2)); JPanel panel1 = new JPanel(); panel1.add(accountLabel); panel1.add(accountTextField); JPanel panel2 = new JPanel(); panel2.add(passwordLabel); panel2.add(passwordField); JPanel panel3 = new JPanel(); panel3.add(loginButton); panel3.add(registerButton); panel.add(panel1); panel.add(panel2); panel.add(panel3); jFrame.setSize(400, 300); jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE); jFrame.setVisible(true); jFrame.add(panel); registerButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String account = accountTextField.getText(); String password = new String(passwordField.getPassword()); DatabaseHelper.addUser(account, password); } }); } } class DatabaseHelper { private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/xscj?db_student"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; public static void addUser(String account, String password) { new Thread(() -> { try (Connection connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); Statement statement = connection.createStatement()) { String sql = "INSERT INTO opop VALUES ('" + account + "', '" + password + "')"; statement.executeUpdate(sql); String query = "SELECT * FROM opop"; ResultSet resultSet = statement.executeQuery(query); while (resultSet.next()) { String id = resultSet.getString("ID"); String name = resultSet.getString("name"); System.out.println(id + name); } System.out.println(" "); } catch (SQLException e) { e.printStackTrace(); } }).start(); } } ``` 希望这些优化可以对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值