- 浏览: 129587 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mr_wangjq:
...
跟着官网学Struts2使用(一) -
雪馨25:
sweat89 写道嗯,楼主的学习方法,很值得我学习。加油!! ...
跟着官网学Struts2使用(一) -
雪馨25:
381895649 写道建议用用springmvc,哈.嗯,都 ...
跟着官网学Struts2使用(一) -
sweat89:
嗯,楼主的学习方法,很值得我学习。加油!!
跟着官网学Struts2使用(一) -
381895649:
建议用用springmvc,哈.
跟着官网学Struts2使用(一)
一、实现效果
二、代码
//此类为构造了一个JPanel,其中添加了一个JTextField和一个Button,点击按钮弹出日历选择对话框 public class CalendarDialog extends JPanel { private static final long serialVersionUID = 1L; private int width = 220; // 日期控件的宽度 private int height = 220; // 日期控件的高度 static CalendarDialog date; private GridBagLayout gridBagLayout1 = new GridBagLayout(); private JTextField dateField = new JTextField(); // JButton btnChoose = new JButton("▼"); DateChooserButton btnChoose = new DateChooserButton("▼"); // ▼是指:▼下拉箭头的unicode码 private String parten; private Container owner; private int length = 80; private Point startPoint; javax.swing.JDialog dateFrame; public Point getStartPoint() { return startPoint; } public void setStartPoint(Point startPoint) { this.startPoint = startPoint; } public CalendarDialog(Container owner, int length) { this.owner = owner; this.parten = "yyyy-MM-dd"; this.length = length; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。 */ public CalendarDialog(Container owner, String partten, int length) { this.owner = owner; this.parten = partten; this.length = length; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 根据一个所有者和一个日期的显示格式构造一个DateChooser对象。 */ public CalendarDialog(Container owner, String partten) { this.owner = owner; this.parten = partten; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 以缺省的partten构建DateChooser对象 日期选择框的所有者必须是Frame或者是JFrame对象。 */ public CalendarDialog(Container owner) { this.owner = owner; this.parten = "yyyy-MM-dd"; try { init(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 系统初始化 * * @throws Exception */ private void init() throws Exception { dateField.setToolTipText("单击右边的按钮即可选择日期"); btnChoose.setToolTipText("单击即可选择日期"); this.setLayout(gridBagLayout1); dateField.setEditable(false); btnChoose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CalendarDialog.this.btnChoose_actionPerformed(e); } }); Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parten); this.setText(simpleDateFormat.format(date)); this.add(dateField, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets( 0, 0, 5, 0), this.length, 0)); this.add(btnChoose, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets( 0, 0, 5, 0), 0, 0)); } public void setToolTipText(String text) { dateField.setToolTipText(text); btnChoose.setToolTipText(text); } /** * 下拉按钮的事件处理 * * @param e * ActionEvent */ public void btnChoose_actionPerformed(ActionEvent e) { dateFrame = new javax.swing.JDialog(); dateFrame.setModal(false);//设置为非模式对话框 dateFrame.setUndecorated(true); dateFrame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);//设置模式 dateFrame.setLocationRelativeTo(dateField); int x = dateFrame.getLocation().x - (dateField.getWidth() / 2); int y = dateFrame.getLocation().y + (dateField.getHeight() / 2); dateFrame.setLocation(new Point(x, y)); dateFrame.setSize(width, height); dateFrame.addWindowListener(new WindowAdapter() { // 在任意的非日期选择区单击,则日期选择组件将变为非活动状态,自动释放资源。 public void windowDeactivated(WindowEvent e) { // dateFrame.setModal(false); javax.swing.JDialog f = (javax.swing.JDialog) e.getSource(); parentDialog.setModal(true); f.dispose(); } }); DatePanel datePanel = new DatePanel(dateFrame, parten); dateFrame.getContentPane().setLayout(new BorderLayout()); dateFrame.getContentPane().add(datePanel); dateFrame.setVisible(true); } /** * 得到日期控件中的值 * * @return String */ public String getText() { return this.dateField.getText(); } /** * 设置文本域的值 * * @param text * String */ public void setText(String text) { this.dateField.setText(text); } /** * 该方法非常有用,是外部直接访问的TextField对象。 * * @return JTextField */ public JTextField getDateField() { return dateField; } /** * 内部类,日期选择控件的主体,封装了所有日期选择的内容,主要是一个Panel */ class DatePanel extends JPanel implements MouseListener, ChangeListener { private static final long serialVersionUID = 1L; int startYear = 1970; // 默认【最小】显示年份 int lastYear = 2100; // 默认【最大】显示年份 Color backGroundColor = Color.gray; // 底色 // 月历表格配色----------------// Color palletTableColor = Color.white; // 日历表底色 Color weekFontColor = Color.blue; // 星期文字色 Color dateFontColor = Color.black; // 日期文字色 Color weekendFontColor = Color.red; // 周末文字色 Color moveButtonColor = Color.BLUE; // 鼠标移动的日历底色 Color todayBtnColor = Color.pink; // 今天的日历底色 // 控制条配色------------------// Color controlLineColor = Color.pink; // 控制条底色 Color controlTextColor = Color.white; // 控制条标签文字色 JSpinner yearSpin; JSpinner monthSpin; JSpinner hourSpin; JButton[][] daysButton = new JButton[6][7]; javax.swing.JDialog f; JPanel dayPanel = new JPanel(); // 日期panel JPanel yearPanel = new JPanel(); Calendar calendar = Calendar.getInstance(); String pattern; /** * 日期选择控件放在了非模态对话框中 */ public DatePanel(javax.swing.JDialog target, String pattern) { super(); System.out.println("5555555555DatePanel"); this.f = target; this.pattern = pattern; setLayout(new BorderLayout()); setBorder(new LineBorder(backGroundColor, 2)); setBackground(backGroundColor); initButton(); // 初始化放置日期的按钮。 createYearAndMonthPanal(); // this.flushWeekAndDayPanal(calendar); // 之前必须先保证放置日期的按钮已经初始化。 this.setLayout(new BorderLayout()); this.add(yearPanel, BorderLayout.NORTH); this.add(dayPanel, BorderLayout.CENTER); } /** * 日期选择控件的按钮初始化 */ private void initButton() { System.out.println("666666666initButton"); int actionCommandId = 1; for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { JButton numberButton = new JButton(); numberButton.setBorder(BorderFactory.createEmptyBorder()); numberButton.setHorizontalAlignment(SwingConstants.CENTER); numberButton.setActionCommand(String .valueOf(actionCommandId)); numberButton.addMouseListener(this); numberButton.setBackground(palletTableColor); numberButton.setForeground(dateFontColor); numberButton.setText(String.valueOf(actionCommandId)); numberButton.setPreferredSize(new Dimension(25, 25)); daysButton[i][j] = numberButton; actionCommandId++; } } } private Date getNowDate() { return Calendar.getInstance().getTime(); } private Calendar getNowCalendar() { Calendar result = Calendar.getInstance(); return result; } private Date getSelectDate() { return calendar.getTime(); } /** * 创建年月日的面板 */ private void createYearAndMonthPanal() { System.out.println("777777777createYearAndMonthPanal"); Calendar c = getNowCalendar(); int currentYear = c.get(Calendar.YEAR); int currentMonth = c.get(Calendar.MONTH) + 1; int currentHour = c.get(Calendar.DAY_OF_MONTH); yearSpin = new JSpinner(new javax.swing.SpinnerNumberModel( currentYear, startYear, lastYear, 1)); monthSpin = new JSpinner(new javax.swing.SpinnerNumberModel( currentMonth, 1, 12, 1)); hourSpin = new JSpinner(new javax.swing.SpinnerNumberModel( currentHour, 0, 31, 1)); yearPanel.setLayout(new java.awt.FlowLayout()); yearPanel.setBackground(controlLineColor); yearSpin.setPreferredSize(new Dimension(60, 23)); yearSpin.setName("Year"); yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####")); yearSpin.addChangeListener(this); yearPanel.add(yearSpin); JLabel yearLabel = new JLabel("年"); yearLabel.setForeground(controlTextColor); yearPanel.add(yearLabel); monthSpin.setPreferredSize(new Dimension(40, 23)); monthSpin.setName("Month"); monthSpin.addChangeListener(this); yearPanel.add(monthSpin); JLabel monthLabel = new JLabel("月"); monthLabel.setForeground(controlTextColor); yearPanel.add(monthLabel); hourSpin.setPreferredSize(new Dimension(40, 23)); hourSpin.setName("Day"); hourSpin.addChangeListener(this); yearPanel.add(hourSpin); JLabel hourLabel = new JLabel("日"); hourLabel.setForeground(controlTextColor); yearPanel.add(hourLabel); } /** * 根据日期刷新显示面板 */ private void flushWeekAndDayPanal(Calendar c) { c.set(Calendar.DAY_OF_MONTH, 1); c.setFirstDayOfWeek(0); int firstdayofWeek = c.get(Calendar.DAY_OF_WEEK); int lastdayofWeek = c.getActualMaximum(Calendar.DAY_OF_MONTH); String colname[] = { "日", "一", "二", "三", "四", "五", "六" }; int today = getNowCalendar().get(Calendar.DAY_OF_MONTH); // 设置固定字体,以免调用环境改变影响界面美观 dayPanel.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12)); dayPanel.setLayout(new GridBagLayout()); dayPanel.setBackground(Color.white); JLabel cell; for (int i = 0; i < 7; i++) { cell = new JLabel(colname[i]); cell.setHorizontalAlignment(JLabel.CENTER); cell.setPreferredSize(new Dimension(25, 25)); if (i == 0 || i == 6) { cell.setForeground(weekendFontColor); } else { cell.setForeground(weekFontColor); } dayPanel.add(cell, new GridBagConstraints(i, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); } int actionCommandId = 1; for (int i = 0; i < 6; i++) { for (int j = 0; j < 7; j++) { JButton numberButton = daysButton[i][j]; actionCommandId = Integer.parseInt(numberButton .getActionCommand()); if (actionCommandId == today) { numberButton.setBackground(todayBtnColor); } if ((actionCommandId + firstdayofWeek - 2) % 7 == 6 || (actionCommandId + firstdayofWeek - 2) % 7 == 0) { numberButton.setForeground(weekendFontColor); } else { numberButton.setForeground(dateFontColor); } if (actionCommandId <= lastdayofWeek) { int y = 0; if ((firstdayofWeek - 1) <= (j + firstdayofWeek - 1) % 7) { y = i + 1; } else { y = i + 2; } dayPanel.add(numberButton, new GridBagConstraints((j + firstdayofWeek - 1) % 7, y, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); } } } } private int getSelectedYear() { return ((Integer) yearSpin.getValue()).intValue(); } private int getSelectedMonth() { return ((Integer) monthSpin.getValue()).intValue(); } private int getSelectedHour() { return ((Integer) hourSpin.getValue()).intValue(); } /** * 年月小时的事件处理 * @param e ChangeEvent */ public void stateChanged(ChangeEvent e) { JSpinner source = (JSpinner) e.getSource(); if (source.getName().equals("Day")) { calendar.set(Calendar.DAY_OF_MONTH, getSelectedHour()); return; } if (source.getName().equals("Year")) { calendar.set(Calendar.YEAR, getSelectedYear()); dayPanel.removeAll(); this.flushWeekAndDayPanal(calendar); dayPanel.revalidate(); dayPanel.updateUI(); return; } if (source.getName().equals("Month")) { calendar.set(Calendar.MONTH, getSelectedMonth() - 1); dayPanel.removeAll(); this.flushWeekAndDayPanal(calendar); dayPanel.revalidate(); dayPanel.updateUI(); return; } } /** * 日期按钮的鼠标事件处理 * @param e MouseEvent */ public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) { JButton source = (JButton) e.getSource(); String value = source.getText(); int day = Integer.parseInt(value); calendar.set(Calendar.DAY_OF_MONTH, day); Date selectDate = this.getSelectDate(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat( pattern); CalendarDialog.this .setText(simpleDateFormat.format(selectDate)); // int year = calendar.get(Calendar.YEAR); // int month = calendar.get(Calendar.MONTH) + 1; // System.out.println(year + "年" + month + "月" + day + "日"); f.dispose(); } } public void mousePressed(MouseEvent e) { // 空实现接口中的方法,不能删除 } public void mouseReleased(MouseEvent e) { // 空实现接口中的方法,不能删除 } /** * 鼠标移动到日历中的事件 * @param e MouseEvent */ public void mouseEntered(MouseEvent e) { JButton jbutton = (JButton) e.getSource(); jbutton.setBackground(moveButtonColor); } /** * 鼠标移出日历中的事件 * * @param e * MouseEvent */ public void mouseExited(MouseEvent e) { JButton jbutton = (JButton) e.getSource(); int comm = Integer.parseInt(jbutton.getActionCommand()); int today = getNowCalendar().get(Calendar.DAY_OF_MONTH); if (comm == today) { jbutton.setBackground(todayBtnColor); } else { jbutton.setBackground(palletTableColor); } } } /** * 内部类,改变按钮的边框不可编辑区,使外观更加协调。 */ class DateChooserButton extends JButton { private static final long serialVersionUID = 1L; public DateChooserButton(String text) { super(text); setPreferredSize(new Dimension(30, 21)); } public Insets getInsets() { // return new Insets(0, 0, 0, 0); return new Insets(4, 2, 0, 2); } } public static void main(String[] args) { JDialog frame2 = new JDialog(); // frame2.getContentPane().setLayout(null); JPanel jp = new JPanel(); jp.setSize(200, 100); JPanel jp1 = new JPanel(); jp1.setSize(200, 100); CalendarDialog date = new CalendarDialog(jp); jp.add(date); jp1.add(jp); frame2.getContentPane().add(jp1); frame2.setSize(500, 400); frame2.setTitle("实例"); frame2.setVisible(true); } }
代码记录方便查询使用
发表评论
-
算法--排序(冒泡,选择,插入,快速)
2013-01-08 14:35 1776一、冒泡排序 1.1 概念 重复地走访过要排序的数 ... -
基础正则表达式知识学习总结
2012-07-22 00:10 733学习的网址 http://regexbook ... -
【java】JTable中某一列设置为下拉列表
2012-07-23 17:34 1231JComboBox c = new JComboBox( ... -
【java】JETM--Java™的执行时间测量库简单学习(一)
2012-08-15 17:11 1957一、下载 用途:测试Java™应用程序潜在的性 ... -
【java】实现柱状图 饼状图
2012-08-30 10:45 3043一、前提: 下载增加ja ... -
【java】实现导出Excel文件和XML文件
2012-08-30 14:43 3167一、功能简述 点击“导出”按钮,弹出文件选择对话框, ... -
【java】实现发送带附件email
2012-08-31 15:30 1362一、目标 用java代码实现发送带附件email的功 ... -
【java】值传递和引用传递理解
2012-09-03 18:48 835一、理解 ★ 当一个变量最为一个参数传入方法 ... -
【java】构造函数的继承执行顺序
2012-09-08 11:31 2694问题: 子类继承父类,构造函数及公共属性的执行顺序是 ... -
【java】加密方式
2012-09-11 15:06 968/** * String Utility Class Th ... -
【hibernate】问题:hibernate无法持久化数据
2012-10-25 16:57 1007现象: 程序执行正确,但数据库没有已经执行成功的插入数据 ... -
【java】JTextField与JComboBox结合动态匹配输入信息
2012-11-07 14:24 2418一、实现效果 二、代码 import ... -
【java】反射可执行的实例
2012-12-01 18:17 942一、实例目标 根据传入的完整类名字符串类名,实现 ...
相关推荐
### 在SWT开发中实现的日历对话框 #### 概述 SWT(Standard Widget Toolkit)是Eclipse平台上的一种用于创建图形用户界面的工具包。它提供了丰富的组件库,允许开发者构建高性能、外观本地化的应用程序。本文将...
本文将深入探讨两种实现`DatePicker`日历对话框的方法,并介绍如何通过它们来实现各种自定义效果。 ### 1. 基础使用 #### 1.1 XML布局声明 在你的`activity`或`fragment`的布局文件中,可以声明一个`DatePicker`。...
这种方式通常通过结合`JTextField`和自定义的日历对话框实现。用户点击文本框时,会弹出一个包含日历视图的对话框,用户可以在其中选择日期,然后选择的日期会显示在文本框内。这种设计简洁直观,适用于需要快速...
总的来说,“java小日历”是一个基础的Java GUI应用,使用了Swing库中的`JFrame`和`JDialog`组件来实现日历和日程管理功能。虽然存在一些未完成的功能,但它提供了一个学习和改进的基础,对于Java GUI编程初学者来说...
本项目“自己制作的JAVA日历源码”是一个模仿Windows 7小日历工具的实现,旨在提供一个简洁易用的日历界面,用户可以查看日期、切换月份和年份,甚至可能包含一些基本的日程管理功能。 首先,这个项目的核心是Java ...
在Java编程中,创建一个日历记事本应用是一个常见的任务,这有助于用户管理日常活动和计划。在提供的文档中,我们看到一个名为`CalendarPad`的类,它实现了`MouseListener`接口,用于处理用户的鼠标事件。这个类是...
- 实现了日志的保存、读取和删除功能,并提供了相应的用户确认对话框。 - **Year 类**: - 负责处理年份的增减逻辑。 - 包括输入年份的处理以及“上一年”、“下一年”按钮的事件监听。 - 通过事件监听器实现...
(2)定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框; (3)查询信息:用户可以查询到某个月的所有提示信息。 四. 提交的成果 1. ...
根据给定的信息,我们可以深入探讨如何使用Java编程语言来实现一个简单但实用的日历功能。该程序能够根据用户输入的年份和月份显示相应的月份日历。以下是对该程序涉及的关键知识点进行详细解释: ### 1. 用户输入...
JDatePicker则是另一个流行的Java日历组件,它提供了一个直观的日期选择对话框。使用JDatePicker,你需要导入以下库: ```java import net.sourceforge.jdatepicker.JDatePicker; import ...
总的来说,开发一个Java日历应用程序涉及到GUI设计、事件处理、日期操作等多个核心Java编程概念。通过熟练掌握这些知识点,我们可以构建出功能强大的日历工具,为用户提供直观、易用的日历查看和管理体验。
根据提供的文件内容,我们可以分析出以下关于Java日历组件及其使用示例的知识点: 1. Java日历组件的概念:在Java中,日历组件通常是指用于日期和时间管理的类库和组件,例如AWT和Swing库中的相关组件。AWT...
以下是一个基于Java Swing的日历选择器(DateChooser)的实现,适用于Eclipse开发环境。 1. **组件导入**: 首先,你需要导入相关的Java类库,如`java.awt.*`、`javax.swing.*`等,这些库包含了创建日历面板所需的...
通过JCalendar,你可以创建一个弹出的日历对话框,或者将其嵌入到其他组件中。以下是一些关键特性: 1. **日期选择**:用户可以通过点击日历控件来选择特定的日期。 2. **时间选择**:除了日期,JCalendar还可以...
Java Swing提供了`JOptionPane`类,可以创建简单的提示对话框,但若要实现分层显示,可能需要自定义组件,例如使用`JDialog`或`JWindow`。这需要考虑窗口的位置、大小、透明度以及关闭机制,确保提示信息不会干扰...
`MyCalendar.java` 文件很可能是这个日历组件的主要实现代码,它可能包含了Java Swing的相关类和方法,如JFrame、JPanel、JButton等,用于构建日历视图和交互逻辑。开发者可能通过重写特定的事件监听器(如...
在项目文件`MyCalendar`中,可能包含了自定义日历视图的布局文件、自定义日历视图的Java代码以及相关的逻辑处理。通过分析这个文件,你可以深入理解上述各个步骤的具体实现细节。 总之,实现一个Android日历功能...
MaterialCalendarviewDialogDemo是基于Java实现的一个项目,它展示了如何在Android应用中使用Material Design风格的日历对话框。Material Design是Google推出的一种设计语言,强调简洁、直观且富有层次感的用户界面...
总结来说,"java日历记事本"项目涵盖了Java日期和时间API的使用、GUI编程(Swing或JavaFX)、事件处理、数据存储和恢复、用户交互逻辑以及软件设计原则等多个重要知识点。通过完成这样的项目,学生不仅可以加深对...
【基于Java的GUI界面的日历记事本】是一款集成了日历和记事功能的桌面应用程序,它利用Java的图形用户界面(GUI)技术来提供一个直观易用的平台,让用户能够轻松地管理日常生活中的事件和提醒。在这个系统中,用户...