package work.rexhao.gjp.tools;
import javax.swing.*;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DateChooser extends JPanel {
private static final long serialVersionUID = -5384012731547358720L;
private Calendar calendar;
private Calendar now = Calendar.getInstance();
private JPanel calendarPanel;
private java.awt.Font font = new java.awt.Font("Times", java.awt.Font.PLAIN, 12);
private java.text.SimpleDateFormat sdf;
private final LabelManager lm = new LabelManager();
private javax.swing.Popup pop;
private TitlePanel titlePanel;
private BodyPanel bodyPanel;
private FooterPanel footerPanel;
private JComponent showDate;
private boolean isShow = false;
private static final String DEFAULTFORMAT = "yyyy-MM-dd";
private static final String[] showTEXT = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
private static WeekLabel[] weekLabels = new WeekLabel[7];
private static int defaultStartDAY = 0;
private static Color hoverColor = Color.BLUE;
private DateChooser(Date date, String format, int startDAY) {
if (startDAY > -1 && startDAY < 7) {
defaultStartDAY = startDAY;
}
int dayIndex = defaultStartDAY;
for (int i = 0; i < 7; i++) {
if (dayIndex > 6) {
dayIndex = 0;
}
weekLabels[i] = new WeekLabel(dayIndex, showTEXT[dayIndex]);
dayIndex++;
}
sdf = new java.text.SimpleDateFormat(format);
calendar = Calendar.getInstance();
calendar.setTime(date);
initCalendarPanel();
}
public static DateChooser getInstance(Date date, String format) {
return new DateChooser(date, format, defaultStartDAY);
}
public static DateChooser getInstance(Date date) {
return getInstance(date, DEFAULTFORMAT);
}
public static DateChooser getInstance(String format) {
return getInstance(new Date(), format);
}
public static DateChooser getInstance() {
return getInstance(new Date(), DEFAULTFORMAT);
}
private void initCalendarPanel() {
calendarPanel = new JPanel(new BorderLayout());
calendarPanel.setBorder(BorderFactory.createLineBorder(new Color(0xAA, 0xAA, 0xAA)));
calendarPanel.add(titlePanel = new TitlePanel(), BorderLayout.NORTH);
calendarPanel.add(bodyPanel = new BodyPanel(), BorderLayout.CENTER);
calendarPanel.add(footerPanel = new FooterPanel(), BorderLayout.SOUTH);
this.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent event) {
}
public void ancestorRemoved(AncestorEvent event) {
hidePanel();
}
public void ancestorMoved(AncestorEvent event) {
hidePanel();
}
});
}
public void register(final JComponent showComponent) {
this.showDate = showComponent;
showComponent.setRequestFocusEnabled(true);
showComponent.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
showComponent.requestFocusInWindow();
}
});
this.setPreferredSize(new Dimension(90, 25));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
showComponent.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
if (showComponent.isEnabled()) {
showComponent.setCursor(new Cursor(Cursor.HAND_CURSOR));
}
}
public void mouseExited(MouseEvent me) {
if (showComponent.isEnabled()) {
showComponent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
showComponent.setForeground(Color.BLACK);
}
}
public void mousePressed(MouseEvent me) {
if (showComponent.isEnabled()) {
showComponent.setForeground(hoverColor);
if (isShow) {
hidePanel();
} else {
showPanel(showComponent);
}
}
}
public void mouseReleased(MouseEvent me) {
if (showComponent.isEnabled()) {
showComponent.setForeground(Color.BLACK);
}
}
});
showComponent.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
hidePanel();
}
public void focusGained(FocusEvent e) {
}
});
}
private void hidePanel() {
if (pop != null) {
isShow = false;
pop.hide();
pop = null;
}
}
private void showPanel(Component owner) {
if (pop != null) {
pop.hide();
}
Point show = new Point(0, showDate.getHeight());
SwingUtilities.convertPointToScreen(show, showDate);
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int x = show.x;
int y = show.y;
if (x < 0) {
x = 0;
}
if (x > size.width - 212) {
x = size.width - 212;
}
if (y > size.height - 167) {
y -= 165;
}
pop = PopupFactory.getSharedInstance().getPopup(owner, calendarPanel, x, y);
pop.show();
isShow = true;
}
private void commit() {
if (showDate instanceof JTextField) {
((JTextField) showDate).setText(sdf.format(calendar.getTime()));
} else if (showDate instanceof JLabel) {
((JLabel) showDate).setText(sdf.format(calendar.getTime()));
}
hidePanel();
}
private class TitlePanel extends JPanel {
private static final long serialVersionUID = -2865282186037420798L;
private JLabel preYear, preMonth, center, nextMonth, nextYear, centercontainer;
public TitlePanel() {
super(new BorderLayout());
this.setBackground(new Color(190, 200, 200));
initTitlePanel();
}
private void initTitlePanel() {
preYear = new JLabel("<<", JLabel.CENTER);
preMonth = new JLabel("<", JLabel.CENTER);
center = new JLabel("", JLabel.CENTER);
centercontainer = new JLabel("", JLabel.CENTER);
nextMonth = new JLabel(">", JLabel.CENTER);
nextYear = new JLabel(">>", JLabel.CENTER);
preYear.setToolTipText("Last Year");
preMonth.setToolTipText("Last Month");
nextMonth.setToolTipText("Next Month");
nextYear.setToolTipText("Next Year");
preYear.setBorder(BorderFactory.createEmptyBorder(2, 10, 0, 0));
preMonth.setBorder(BorderFactory.createEmptyBorder(2, 15, 0, 0));
nextMonth.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 15));
nextYear.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 10));
centercontainer.setLayout(new BorderLayout());
centercontainer.add(preMonth, BorderLayout.WEST);
centercontainer.add(center, BorderLayout.CENTER);
centercontainer.add(nextMonth, BorderLayout.EAST);
this.add(preYear, BorderLayout.WEST);
this.add(centercontainer, BorderLayout.CENTER);
this.add(nextYear, BorderLayout.EAST);
this.setPreferredSize(new Dimension(210, 2
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
JavaGUI期末作业-管家婆记账管理软件是一个基于Java图形用户界面(GUI)的记账管理软件。它提供了方便、直观的界面,帮助用户记录和管理个人或家庭的财务信息。该软件支持账目记录、分类统计、报表生成等功能,旨在帮助用户更好地管理和控制个人财务。 适用人群包括个人用户、家庭用户以及需要进行财务管理的小型组织。无论是个人理财、家庭预算规划还是小型组织的财务管理,该软件都能满足各种需求。 使用场景及目标包括但不限于: 1. 账目管理:用户可以记录各种收入和支出的账目,包括工资、房租、日常开销等,并进行分类和标记。 2. 统计分析:软件提供了分类统计功能,用户可以查看各类收入和支出的总额、占比等信息,帮助用户了解财务状况。 3. 报表生成:用户可以生成财务报表,如月度收支报表、年度预算报表等,以便更好地分析和规划财务。 该软件的目标是提供一个简单易用、功能完善的记账管理工具,帮助用户实现财务管理的自动化和便捷化。它具有用户友好的界面设计和操作流程,旨在提高用户的财务管理效率和准确性。
资源推荐
资源详情
资源评论
收起资源包目录
JavaGUI期末作业-管家婆记账管理软件 (362个子文件)
0036acb19e32636921ed05696427f9ef132aa7 233B
01a58b0c17d02e3b07f5b9a46c516dc0e61931 235B
01b1c137f78772018bf1213e8845aa20072362 542B
024397d304d0d4b7d4b63d68560e86ae5ae103 781B
026aafda65de15b09dc21a5e8b5830fa312ff7 144B
031eb07bf1cb428b43e49fd85ef938e876b44e 224B
03865c39c47889ad17d87ad84c01e5b61b7ebd 120B
0428dc55e15dd14897bd2d9208829c8cedaa74 82B
068c5da8550d6c096e60e53d269081e1199849 347B
095738c1ea91eea83c4bcd101a496e9964e70d 45B
0acbe30dae66c667a5e30b4edfd344bd2277ae 82B
0ca278d167c95a9ffc2978364924a9b1449092 612B
0ca6bedf384db9d04eda2363cd9ff0913bd3ff 248B
0ec8dadfa9be8050f6117c44db6bae67dc4f98 215B
0ed27fc7e957be7a81d555468dc3e043d755c5 151B
0f2dc8a3a052bb76bac437edde987b0e323e18 46B
10f6bd93de8edadcac0d201e4b42ccde9102b7 49B
12fd392989181f84ad7176ea40b3a148a979ec 5KB
13f7e6fcf83515e70c9be2e7032d0f4e54181b 150B
14ae6186020acb482e479b7f98a93da58671fd 219B
15e33a85837fdcf3cbdbf086a07b41ef2ffea2 226B
16193c90a69594cb989092d746a35bdf407c59 224B
18f20e0bd6dd957a0fa3010ae7785ccce1c0e4 1KB
199b8cad89cce85a8ad76e995ba20ab79acb88 1KB
1b7ab5fb924a6e637a6b605721ea85f0af7884 819KB
1b7ffdcc471d1754b59834cadf3a520e15059d 115B
1ba3baf6d06c8426d951710c732d9b51de7864 2KB
1be9d7caa3bea17e8eb0ddbf8bf8590c05ae95 80B
1d0795ace12bc966f4e1d469ad692b432d4fe3 3KB
1d44031499d0b5e35d59e873ea4620fa09b355 226B
1eba4a21897fd97adcd5ec8f92a6ef23d3281d 551B
1ed98d00c9209fbcb33b0c8bce034b1e284ba9 668B
1fafabfab80b6a78801bd23b58823fd2db1064 260B
20ea5fa7bc51ad14f5379255038d37af8bfa28 356B
20ed6668bddd3ea0653e62a2b511a8139f71a5 283B
24a94ed74271ccb175e963cc6e948682609195 805B
24be9f5ae2897db09472fca87432260c7c9e5e 222B
24dd52349a3bdbe514e81bb128bcdf1570e911 75B
24e0c2557a8a217ef7bd22625b2161b2d60f01 75B
2504ac2e0e68781d8d5135683c6d0047900e56 939B
274211f590d71543994d8807e18f00eff861a3 1KB
2786eee2897019fbc91524d375d9630f079dd1 265B
286d87eec15259bc2db0a2dd5e31b6977d0764 1KB
2a708331a7a53891b194c22894858d4a5ea681 71B
2a7cd18089a24dccdf07921a09d3385aba2184 2KB
2ab031adbbe2bb9e43a1e4a01eab16f56a3384 1KB
2b700607ab72ca44c1d5267541833c860bf460 192B
2caefb8b50a113da27093898a1068ebcaa2522 88B
2ddddb127b0b8dbd7b69c57c812f0d01d15338 1KB
30865f21bdc4e6d8091b237f160ca8e281a501 922B
30c4f442d703b881a5c19bdd31d17fe2a2bacd 65B
31b070ee8bb7a2bc0e6e8c438e328de16b7ae2 604B
3213d18e32ee01b494f94afda7ad5cff2c6796 2KB
32d0ad401d12c3e73a1b88ef0cf8fb55317f9d 412B
33063b92e28e9a108c4de063efac37a8962eed 673B
33bf35e4b2494f7b0ffcb15bc4619e3cd9b8ed 88B
35d167eb32600adbd81c9ea2f9f1708418aa7b 48B
35df3c4ff1c7d493ee5c4215a910c8a21b6bc0 1KB
3770f07a9d883725d3b24751df38166d3b1902 3KB
37f469f31be3626e2720d4fa54730fc7ba7e32 475KB
38897b447204046227e3e0b3017a00a6d28862 720B
38996bbd957368b03a9169027be10ed66f1121 1KB
3940724bac815917908d3c87776005cefb1631 88B
3944dbdea9f505619718f48c6420c740823afa 84B
3d309da0a0a23fc0717d156e17ed1ee9965050 76B
403189eee2a0af2207f289fdbd1f449c2abcd9 48B
4089b9dc249474a213129058e474bb50c9c19f 27KB
40e01298473d32e7fd19749d2b89d1b7399745 370B
413b94759ab3bb040700d215ad69c3ca283296 555B
414eee7d7af601bcfe4fedb03b8bec120d08a9 779B
430cd93135f05e040ad2012a81edacd9138ada 199B
433a08ef8c9654e2226b05c35d45fb62ae0bd8 301B
43af6754b141b11889a3b5eb05e0478877d0fb 77B
45372e0cdd4cdf416685846c5377a5f2a1c79f 145B
45be0b4284f7593dffd888d7acc65a2bf483c2 452B
462d572745e0454a2d2dea9ebc8dc578876cb7 309B
467130b64bc2e97d31aace317eddc52c3e7706 1014B
4af9abf356be4a51606b20ddb036b2b28702c5 2KB
4bc6f18a8917ead174159d59dffa0cf9660bdf 3KB
4bf8e8f22c94ac9c9d01dbd818b01379dfd2a6 248B
4d3d0c7b1c4d3a38ffc71a2a2eff48eb726f27 2KB
4e2a24ff1fcafb349513425a0c69a0b4654dbd 274B
50f9d44d0aa2789da5feee5e60853e7976d267 6KB
5633972661cef7033aacc33df76672bce7f08d 2KB
56e35b4a6d9fcf5c995dc3f4a6b8fda1b8a776 87KB
5751e3216db7a740ce7cacc670a6b1ea46787b 224B
57f1bd016229ee066fe9b7f49df467328ac58c 121KB
5ac019f205ae0e4c8a372a1afd6e944be81969 48B
5dbd9457818c8d96a9552d2bcb591dbd78e399 94B
5df55f48a849b9344986664a4305b7c467f769 77B
5eda74ca7d4800c0d78dd0f6d8af74d90ab4f2 45B
6088c8803d0c194f59675fa3225fb74e982b94 46B
616f4617f67ec6b2909cdbb60b658a7e89a8e8 78B
62632857c4deff057bd5d5d8d181778660394f 139B
6354d6ec7ca84c737ab1f90b197830eae2ddba 349B
63a17a55bab2b4496de4d87576e35461c6d330 31B
650069d4bfce3b03401d7e8135e7f34906a7a6 281B
661a94a85801329c6478936e7b3bd9fa89ad69 161B
679b05abfb88f1ec85503e7ba24456a20c1a8e 45B
69c1edc353ff07e771e0bdce6cb43c37a03e66 224B
共 362 条
- 1
- 2
- 3
- 4
资源评论
wmh1024
- 粉丝: 1778
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功