Java swing GUI

一、图形界面绘制

整体界面架构
// 创建 JFrame 实例
JFrame frame = new JFrame("Login Example");
// 窗口大小
frame.setSize(1000, 800);
// 窗口居中
mainFrame.setLocationRelativeTo(null);
// 窗口退出方式
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

/* 创建面板,这个类似于 HTML 的 div 标签
 * 我们可以创建多个面板并在 JFrame 中指定位置
 * 面板中我们可以添加文本字段,按钮及其他组件。
 */
JPanel panel = new JPanel();    
// 添加面板
frame.add(panel);
/* 
    * 调用用户定义的方法并添加组件到面板
    */
   placeComponents(panel);

   // 设置界面可见(什么时候调用这句话?好像是最后的时候)
   frame.setVisible(true);
private static void placeComponents(JPanel panel) {
	/* 布局部分我们这边不多做介绍
	 * 这边设置布局为 null
	 */
	panel.setLayout(null);
	
	// 创建 JLabel
	JLabel userLabel = new JLabel("User:");
	/* 这个方法定义了组件的位置。
	 * setBounds(x, y, width, height)
	 * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
	 */
	userLabel.setBounds(10,20,80,25);
	panel.add(userLabel);
显示弹窗
JPanel contentPane;
JOptionPane.showMessageDialog(contentPane, "用户名为空");
窗口居中
JFramemainFrame = new JFrame();
mainFrame.setSize(1000, 800);
mainFrame.setLocationRelativeTo(null);
表格问题
总结三点:
1、用JScrollPane承接Table,不用JPanel等;
2、用JScrollPane的构造函数构建,或者用scrollPanel.setViewportView(table);
   不用scrollPanel.add(table);
3、承接Table的父容器的布局管理器不能设置为null,其实,对于JScrollPane的布局,有专门的
   scroll的布局,也可以用,简便的话,不设置布局;不要Null;
frame = new JFrame("Calendar");
JPanel showDaysPanel = new JPanel();
frame.add(showDaysPanel, BorderLayout.CENTER);
// 这种写法虽然有种操蛋的感觉
//(因为setShowDaysPanel这个方法本来就是为showDaysPanel定制的,别人也用不了,你传参干什么。。。。)
// 但是这么写也凑乎吧,就是很诡异。
this.setShowDaysPanel(showDaysPanel);

private void setShowDaysPanel(JPanel panel) {
	panel.setLayout(new BorderLayout());
	
	daysTable = new JTable(5, 7);
	JScrollPane scrollPanel = new JScrollPane();
	scrollPanel.setViewportView(daysTable);
	panel.add(scrollPanel);
	
	DefaultTableModel daysTableModel = (DefaultTableModel)daysTable.getModel();
	daysTableModel.setColumnIdentifiers(new Object[] {"日", "一", "二", "三", "四", "五", "六"});
	daysTable.setModel(daysTableModel);
}

修改表格内数据

// 获得表格模型
DefaultTableModel model = (DefaultTableModel)daysTable.getModel();
// 清空表格中数据,直接把整个表格的UI都删没了,只剩下一个表头
model.setRowCount(0);
Object[] dataRow = new Object[7];
for(int i=0; i<daysArray.length/7; i++) {
	for(int j=0; j<7; j++) {
		dataRow[j] = daysArray[i*7 + j];
	}
	model.addRow(dataRow);
}
daysTable.setModel(model);

二、数据交互

获取输入框的数据

界面构建:

// 用户名输入框
JTextField textFieldUser = new JTextField();
textFieldUser.setBounds(125, 50, 100, 15);
contentPane.add(textFieldUser);
textFieldUser.setColumns(10); // 什么意思
// 密码输入框
JPasswordField textFieldPwd = new JPasswordField();
textFieldPwd.setBounds(125, 100, 100, 15);
contentPane.add(textFieldPwd);
textFieldPwd.setColumns(10); // 什么意思

内容获取

String userName = textFieldUser.getText();
String pwd = new String(textFieldPwd.getPassword());
DBService db = new DBService(userName, pwd);

注意:密码的获取方式 String pwd = new String(textFieldPwd.getPassword());

输入框设置初始值
textFieldUser.setText("root");
textFieldPwd.setText("123456");

三、事件绑定

事件绑定所用java语法
// 第一种
insertButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        insertButtonHandle(e);
    }
});
// 第二种
insertButton.addActionListener(e -> this.insertButtonHandle(e));
// 第三种
insertButton.addActionListener(this::insertButtonHandle);
按键事件处理
JButton buttonLogin = new JButton("登录");
buttonLogin.setBounds(100, 180, 90, 20);
contentPane.add(buttonLogin);
buttonLogin.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent event) {
	}
});
窗口使能事件处理
frame = new JFrame("Calendar");
frame.addWindowListener(new WindowAdapter() {
	@Override
	public void windowActivated(WindowEvent e) {
		thisWindowActionvateHandle(e);
	}
});
private void thisWindowActionvateHandle(WindowEvent e) {
	this.yearField.setText("2019");
	this.monthField.setText("11");
	showDays();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

匿名匿名匿名11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值