接下来为面板添加保存按钮,并为按钮绑定事件监听。

  1. /**
  2. * @author: lishuai
  3. * @date: 2018/11/26 13:51
  4. */
  5. public class WeimingSyncApplets {
  6. public static void main(String[] args) {
  7. // 面板组件
  8. JPanel taskPanel = new JPanel();
  9. JPanel dbPanel = new JPanel();
  10. JTabbedPane tabbedPane = buildJTabbedPane(taskPanel, dbPanel);
  11. buildFrame(tabbedPane);
  12. }
  13. private static JTabbedPane buildJTabbedPane(JPanel taskPanel, JPanel dbPanel) {
  14. // 选项卡面板
  15. JTabbedPane tabbedPane = new JTabbedPane();
  16. // 通过BorderFactory来设置边框的特性
  17. tabbedPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
  18. tabbedPane.add("执行任务", taskPanel);
  19. tabbedPane.add("数据源配置", dbPanel);
  20. // 下拉框
  21. dbPanel.add(buildJLabel("数据库类型", 10, 20, 80, 25));
  22. String dbs[] = {"mysql", "oracle", "sqlserver"};
  23. dbPanel.add(buildJComboBox("mysql", "mysql", dbs, 0, 100, 20, 165, 25));
  24. // 文本框
  25. dbPanel.add(buildJLabel("用户名", 10, 50, 80, 25));
  26. JTextField dbUserName = buildJTextField("dbUserName", "dbUserName", 20, 100, 50, 165, 25);
  27. dbPanel.add(dbUserName);
  28. // 密码
  29. dbPanel.add(buildJLabel("密码", 10, 80, 80, 25));
  30. JPasswordField dbPassWord = buildJPasswordField("dbPassWord", "dbPassWord", 20, 100, 80, 165, 25);
  31. dbPanel.add(dbPassWord);
  32. // 添加按钮,并为按钮绑定事件监听
  33. JButton saveButton = buildJButton("保存", 185, 230, 80, 25);
  34. addActionListener(saveButton);
  35. dbPanel.add(saveButton);
  36. return tabbedPane;
  37. }
  38. private static void addActionListener(JButton saveButton) {
  39. // 为按钮绑定监听器
  40. saveButton.addActionListener(new ActionListener() {
  41. @Override
  42. public void actionPerformed(ActionEvent e) {
  43. // 对话框
  44. JOptionPane.showMessageDialog(null, "保存成功!");
  45. }
  46. });
  47. }
  48. private static JButton buildJButton(String name, int x, int y, int width, int height) {
  49. JButton button = new JButton(name);
  50. button.setBounds(x, y, width, height);
  51. return button;
  52. }
  53. private static JPasswordField buildJPasswordField(String defaultValue, String name, int columns, int x, int y, int width, int height) {
  54. JPasswordField jPasswordField = new JPasswordField(columns);
  55. jPasswordField.setText(defaultValue);
  56. jPasswordField.setName(name);
  57. jPasswordField.setBounds(x, y, width, height);
  58. return jPasswordField;
  59. }
  60. private static JTextField buildJTextField(String defaultValue, String name, int columns, int x, int y, int width, int height) {
  61. JTextField text = new JTextField(columns);
  62. text.setText(defaultValue);
  63. text.setName(name);
  64. text.setBounds(x, y, width, height);
  65. return text;
  66. }
  67. private static JComboBox buildJComboBox(Object selectedItem, String name, String[] elements, int selectedIndex, int x, int y, int width, int height) {
  68. DefaultComboBoxModel codeTypeModel = new DefaultComboBoxModel();
  69. // elements 下拉框中的选项
  70. for (String element : elements) {
  71. codeTypeModel.addElement(element);
  72. }
  73. JComboBox codeTypeBox = new JComboBox(codeTypeModel);
  74. codeTypeBox.setName(name);
  75. // 默认选中的下拉框选项
  76. codeTypeBox.setSelectedItem(selectedItem);
  77. // codeTypeBox.setSelectedItem(selectedIndex);
  78. codeTypeBox.setBounds(x, y, width, height);
  79. // 添加下拉框事件监听器
  80. codeTypeBox.addItemListener(new ItemListener() {
  81. @Override
  82. public void itemStateChanged(ItemEvent e) {
  83. if (e.getStateChange() == ItemEvent.SELECTED) {
  84. // 选择的下拉框选项
  85. System.out.println(e.getItem());
  86. }
  87. }
  88. });
  89. return codeTypeBox;
  90. }
  91. private static JLabel buildJLabel(String name, int x, int y, int width, int height) {
  92. JLabel label = new JLabel(name);
  93. label.setBounds(x, y, width, height);
  94. return label;
  95. }
  96. private static void buildFrame(JComponent component) {
  97. // 窗体容器
  98. JFrame frame = new JFrame("数据同步工具");
  99. frame.add(component);
  100. // JFrame.EXIT_ON_CLOSE 退出
  101. // JFrame.HIDE_ON_CLOSE 最小化隐藏
  102. frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  103. // 设置布局
  104. frame.getContentPane().setLayout(new BorderLayout());
  105. frame.getContentPane().add(BorderLayout.CENTER, component);
  106. // 设置窗口最小尺寸
  107. frame.setMinimumSize(new Dimension(1060, 560));
  108. // 调整此窗口的大小,以适合其子组件的首选大小和布局
  109. frame.pack();
  110. // 设置窗口相对于指定组件的位置
  111. frame.setLocationRelativeTo(null);
  112. frame.setVisible(true);
  113. // 设置窗口尺寸是否固定不变
  114. frame.setResizable(true);
  115. }
  116. }

效果如图:

Java Swing实战(四)按钮组件JButton及其事件监听的更多相关文章

  1. vue自定义组件添加原生事件监听

    注:全局或局部注册的组件称为子组件,其中声明的组件名称(如下demo中的child)是一个自定义组件 Demo1-直接给父组件添加事件监听 <!DOCTYPE html> <html ...

  2. Java Swing实战(二)下拉菜单组件JComboBox及其事件监听

    接下来给"数据源配置"面板添加下拉框. /** * @author: lishuai * @date: 2018/11/26 13:51 */ public class Weimi ...

  3. Java FX中TreeView节点选中和双击事件监听

    TreeItem<String> treeRoot = new TreeItem<String>("Root"); treeRoot.setExpanded ...

  4. Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  5. 【winform】基于UserControl实现webBrower组件时html页面元素加载及onclick事件监听实现

    [背景]基于System.Windows.Forms.UserControl实现的webBrower组件在html内使用window.external调用winform事件失败. [解决思路]借助wi ...

  6. JAVA学习Swing章节按钮组件JButton的简单学习

    package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; ...

  7. Java事件监听的四种实现方式

    1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听 ...

  8. 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )

    GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...

  9. Java swing(awt):事件监听机制的实现原理+简单示例

    (1)实现原理 事件监听机制的实现: 参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回 ...

随机推荐

  1. phpStorm配置SVN与FTP数据传输

    公司php开发时候,需要搭建环境,自己捋了下思路,公司代码放在SVN服务器上,需要在本机安装TortoiseSVN软件,将代码下载到本机,在本机上调试程序,修改代码,修改的代码再上传到SVN.之后通过 ...

  2. AngularJS入门讲解4:多视图,事件绑定,$resource服务讲解

    上一课,大家知道,手机详细模板我们没有写出来,使用的是一个占位模板. 这一课,我们先实现手机详细信息视图,这个视图会在用户点击手机列表中的一部手机时被显示出来. 为了实现手机详细信息视图,我们将会使用 ...

  3. 【vim】正常模式下的一般操作

    正常模式一般用于浏览文本,其实也就是通过键盘命令让光标在文本中跳来跳去,在任何模式下按一次或两次<Esc>会进入正常模式. 基本思想 vim对光标的定位操作非常精确和高效,这是它的一个非常 ...

  4. java的应用,SVN客户端的安装教程

    1.先注册一个百度云账号,然后打开https://console.bce.baidu.com 这个网站,按照下面的图形点击 !!!!请注意这是要收钱的,但能学习到那用微信打开你的网站也是值得的. 2. ...

  5. 【转载】基于Redis实现分布式锁

    背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端 ...

  6. date命令的基本用法

    date设置时间 设置时间:-s参数 date -s "20190426 15:22:33" date查看时间差  (-d参数多用于脚本) 查看时间差:-d参数date -d &q ...

  7. Sweep Line

    391. Number of Airplanes in the Sky https://www.lintcode.com/problem/number-of-airplanes-in-the-sky/ ...

  8. mono 的System.Data.SqlClient小记录

    厦门-JuzzPig()  15:33:36System.Data.SqlClient 不科学的广州-PC286()  15:33:42webservice 返回的是 xml厦门-JuzzPig()  ...

  9. (转)错误"因为数据库正在使用,所以无法获得对数据库的独占访问权"的解决方案

    引发原因:是因为我在还原数据库的时候,还有其他的用户正在使用数据库,所以就会出现以上提示. 解决方法:1,设置数据库在单用户模式下工作.设置方法:在需要还原的数据库上右击,在右键菜单命令上选择&quo ...

  10. (转)Heartbeat+DRBD+MySQL高可用方案

    原文:http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由D ...