为什么这个选择下拉框不跳转其他日历JPanel panel2 = new JPanel();panel2.setLayout(new GridLayout(7,7));7*7的网格 panel2.add(new JLabel(“一”,SwingConstants.CENTER));panel2.add(new JLabel(“二”,SwingConstants.CENTER));panel2.add(new JLabel(“三”,SwingConstants.CENTER));panel2.add(new JLabel(“四”,SwingConstants.CENTER));panel2.add(new JLabel(“五”,SwingConstants.CENTER));panel2.add(new JLabel(“六”,SwingConstants.CENTER));panel2.add(new JLabel(“日”,SwingConstants.CENTER));int year = comboBoxYear.getSelectedIndex();int month = comboBoxMonth.getSelectedIndex();日历第一个月份的一天 = 日历.getInstance();firstDayOfMonth.set(year,month-1,1);int firstDayOfWeek = firstDayOfMonth.get(Calendar.DAY_OF_WEEK)-1;int numOfMonth = firstDayOfMonth.getActualMaximum(Calendar.DAY_OF_MONTH);整数 k,num = 1;字符串编号;for(k = 0;k < 42;k++){ if(k < firstDayOfWeek - 2||k >= firstDayOfWeek + numOfMonth-2){ panel2.add(new JLabel(“”,SwingConstants.CENTER)); }else{ number = String.valueOf(num); panel2.add(new JLabel(number,SwingConstants.CENTER)); num++; } }ActionListener listener = e -> { int year1 = comboBoxYear.getSelectedIndex(); int month1 = comboBoxMonth.getSelectedIndex();Calendar firstDayOfMonth1 = Calendar.getInstance();首日1.集(年1,月1-1,1);int firstDayOfWeek1 = firstDayOfMonth1.get(Calendar.DAY_OF_WEEK)-1;int numOfMonth1 = firstDayOfMonth1.getActualMaximum(Calendar.DAY_OF_MONTH);整数 k1, 数字 1 = 1;字符串编号 1;for(k1 = 0; k1 < 42; k1++){ if(k1 < firstDayOfWeek1 - 2|| k1 >= firstDayOfWeek1 + numOfMonth1 -2){ panel2.add(new JLabel(“”,SwingConstants.CENTER)); }else{ number1 = String.valueOf(num1); panel2.add(new JLabel(number1,SwingConstants.CENTER)); num1++; } }};comboBoxYear.addActionListener(listener);comboBoxMonth.addActionListener(listener);

时间: 2024-01-24 22:18:58 浏览: 29
可能是因为你没有将这个选择下拉框与其他日历JPanel进行关联。你需要在监听器中添加代码来更新其他日历JPanel的显示内容。具体来说,当选择下拉框的值发生变化时,你需要重新计算该月份的第一天是星期几以及该月份有多少天,然后更新其他日历JPanel的显示内容。你可以通过遍历JPanel中的所有标签来实现更新。
相关问题

javaGUI通过下拉框选择日期来显示日历,不要额外加按钮

可以使用JComboBox来创建下拉框,然后根据选择的日期更新日历显示。 下面是一个简单的实现,可以根据需要进行修改和优化: ```java import java.awt.*; import java.awt.event.*; import java.time.*; import java.time.format.*; import javax.swing.*; public class CalendarGUI extends JFrame implements ActionListener { private final JComboBox<String> yearBox, monthBox; private final JLabel[] dayLabels; private final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-M-d"); public CalendarGUI() { setTitle("Calendar"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); JPanel topPanel = new JPanel(); topPanel.add(new JLabel("Year:")); yearBox = new JComboBox<>(); for (int year = LocalDate.now().getYear() - 10; year <= LocalDate.now().getYear() + 10; year++) { yearBox.addItem(String.valueOf(year)); } yearBox.setSelectedItem(String.valueOf(LocalDate.now().getYear())); yearBox.addActionListener(this); topPanel.add(yearBox); topPanel.add(new JLabel("Month:")); monthBox = new JComboBox<>(); for (int month = 1; month <= 12; month++) { monthBox.addItem(String.valueOf(month)); } monthBox.setSelectedItem(String.valueOf(LocalDate.now().getMonthValue())); monthBox.addActionListener(this); topPanel.add(monthBox); add(topPanel, BorderLayout.NORTH); JPanel centerPanel = new JPanel(new GridLayout(7, 7)); String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; for (String weekDay : weekDays) { centerPanel.add(new JLabel(weekDay, SwingConstants.CENTER)); } dayLabels = new JLabel[42]; for (int i = 0; i < dayLabels.length; i++) { dayLabels[i] = new JLabel("", SwingConstants.CENTER); centerPanel.add(dayLabels[i]); } updateCalendar(); add(centerPanel, BorderLayout.CENTER); pack(); setLocationRelativeTo(null); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == yearBox || e.getSource() == monthBox) { updateCalendar(); } } private void updateCalendar() { int year = Integer.parseInt((String) yearBox.getSelectedItem()); int month = Integer.parseInt((String) monthBox.getSelectedItem()); LocalDate date = LocalDate.of(year, month, 1); int firstDayOfWeek = date.getDayOfWeek().getValue() % 7; int lastDay = date.plusMonths(1).minusDays(1).getDayOfMonth(); for (int i = 0; i < dayLabels.length; i++) { if (i < firstDayOfWeek || i >= firstDayOfWeek + lastDay) { dayLabels[i].setText(""); } else { dayLabels[i].setText(String.valueOf(i - firstDayOfWeek + 1)); } } } public static void main(String[] args) { SwingUtilities.invokeLater(CalendarGUI::new); } } ``` 这个GUI界面包含一个顶部面板和一个中心面板。顶部面板包含两个下拉框,用于选择年份和月份;中心面板包含一个网格布局,用于显示日历。网格布局中第一行为星期几的标签,接下来是42个用于显示日期的标签(最多有6*7=42天)。当用户选择年份或月份时,通过计算更新中心面板中的日期标签。

javaGUI显示日历小程序,不用字符串,使用下拉框,通过选择下拉框的年,月显示对应的当月日历,没有额外按钮,只通过选择下拉框显示日历,使用Calendar类

好的,这是一个简单的Java GUI日历小程序,使用了下拉框和Calendar类来显示当月日历。 ```java import java.awt.*; import java.awt.event.*; import java.util.Calendar; import javax.swing.*; public class CalendarGUI extends JFrame implements ItemListener { private static final long serialVersionUID = 1L; private JComboBox<String> yearComboBox; private JComboBox<String> monthComboBox; private JLabel[] dayLabels; private JPanel calendarPanel; public static void main(String[] args) { SwingUtilities.invokeLater(() -> { new CalendarGUI().setVisible(true); }); } public CalendarGUI() { setTitle("Calendar"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); JPanel controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); yearComboBox = new JComboBox<>(); yearComboBox.addItemListener(this); for (int i = 1900; i <= 2100; i++) { yearComboBox.addItem(String.valueOf(i)); } controlPanel.add(yearComboBox); monthComboBox = new JComboBox<>(); monthComboBox.addItemListener(this); for (int i = 1; i <= 12; i++) { monthComboBox.addItem(String.valueOf(i)); } controlPanel.add(monthComboBox); contentPane.add(controlPanel, BorderLayout.NORTH); calendarPanel = new JPanel(); calendarPanel.setLayout(new GridLayout(0, 7)); String[] dayNames = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; dayLabels = new JLabel[7]; for (int i = 0; i < 7; i++) { dayLabels[i] = new JLabel(dayNames[i], JLabel.CENTER); dayLabels[i].setForeground(Color.BLUE); calendarPanel.add(dayLabels[i]); } contentPane.add(calendarPanel, BorderLayout.CENTER); Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; yearComboBox.setSelectedItem(String.valueOf(year)); monthComboBox.setSelectedItem(String.valueOf(month)); updateCalendar(year, month); } private void updateCalendar(int year, int month) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, 1); int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendarPanel.removeAll(); for (int i = 1; i < firstDayOfWeek; i++) { calendarPanel.add(new JLabel("")); } for (int i = 1; i <= lastDayOfMonth; i++) { JLabel dayLabel = new JLabel(String.valueOf(i), JLabel.CENTER); if (i == calendar.get(Calendar.DAY_OF_MONTH)) { dayLabel.setForeground(Color.RED); } calendarPanel.add(dayLabel); } pack(); } @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { int year = Integer.parseInt((String) yearComboBox.getSelectedItem()); int month = Integer.parseInt((String) monthComboBox.getSelectedItem()); updateCalendar(year, month); } } } ``` 在这个程序中,我们首先创建了一个窗口和两个下拉框,其中一个用于选择年份,另一个用于选择月份。当用户选择年份或月份时,我们将调用`updateCalendar`方法来显示相应的日历。`updateCalendar`方法将使用Calendar类来计算该月份的第一天是星期几,以及该月份有多少天。然后,我们将创建一个网格布局,将星期几标签和日期标签添加到其中。如果当前日期与选定日期相同,我们将以红色显示该日期。最后,我们使用`pack`方法调整窗口大小以适应内容。

相关推荐

最新推荐

recommend-type

Vue.js仿Select下拉框效果

主要为大家详细介绍了Vue.js仿 Select下拉框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

BootStrap中关于Select下拉框选择触发事件及扩展

Select下拉框的问题,想在选择一个选项后,前台显示做出变动,并且知道选择的是第几个选项。 怎么解决这个问题呢?下面小编给大家带来了BootStrap中关于Select下拉框选择触发事件及扩展,需要的朋友参考下吧
recommend-type

用js设置下拉框为只读的小技巧

在项目开发过程中我们时常会碰到要设置下拉框为只读(readonly),但是可惜的是select没有只读属性,所以需要在select外面包含一个span,通过js来改变。 下面这段html代码是在struts2的下拉标签中加入了span标签,在...
recommend-type

Element ui 下拉多选时新增一个选择所有的选项

项目里经常会用到,在一个多选下拉框里新增一个选择所有的选项,例如: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;/title&gt; [removed]...
recommend-type

Layui带搜索的下拉框的使用以及动态数据绑定方法

所以就有了带查询的下拉框出现,这个下拉框的功能很强大,结合了输入框和下拉框为一体,既可以进行模糊查询,又可以直接选择,比以前的下拉框更加方便了。今天要介绍的就是layui的form表单组件里的带查询的下拉框。 ...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。