java - 我无法让日历更改月份
问题描述
我无法获取获取上个月的代码(我试图先获取上个月,然后我可以为当年和下个月/年做同样的事情。我不能使用 JTable 也不能使用拖放.
我试图向按钮添加一个动作侦听器,并使月份为-1,但它不起作用。
public CalendarLayout () {
monthm = new JButton("<");
monthm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
cal.add(Calendar.MONTH, -1);
updateMonth();
// monthPanel(cal);
}
});
monthp = new JButton(">");
monthp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
cal.add(Calendar.MONTH, +1);
}
});
yearm = new JButton("<<");
yearp = new JButton(">>");
day_name = new JLabel [7];
dayss = new JButton [42];
this.monthPanel((GregorianCalendar) cal);
}
int getDay(int m)
{
GregorianCalendar g1=new GregorianCalendar();
g1.set(cal.get(cal.YEAR),m, 1);
return g1.get(g1.DAY_OF_WEEK);
}
boolean is31(int m)
{
boolean b=false;
if(m>=0&&m<=6)
{
for(int i=1;i<8;i++)
{
if(m%2==0)
{
b= true;
}
}
}
else {
for(int i=7;i<12;i++)
{
if(m%2==1)
{
b= true;
}
}
}
return b;
}
void monthPanel(GregorianCalendar cl)
{
pCal=new JPanel();
pCal.setLayout(new GridLayout(7,7));
int month=cl.MONTH+1;
//System.out.println("left");
int fd=getDay(month)-1;
for(int i=0;i<7;i++)
{
day_name[i]=new JLabel (days[i]);
pCal.add(day_name[i]);
}
boolean b=is31(month);
if(month==1)
{
int count=0;
for(int i=fd-1 ;i>=0;i--,count++)
{
dayss[count]=new JButton(31-i+"");
dayss[count].setEnabled(false);
}
if(((GregorianCalendar) cal).isLeapYear(cl.YEAR))
{
for(int i=1;i<=29;i++,count++)
{
dayss[count]=new JButton(i+"");
}
}
else
{
for(int i=1;i<=28;i++,count++)
{
dayss[count]=new JButton(i+"");
}
}
for(int i=count,c=1;i<42;i++,c++,count++)
{
dayss[count]=new JButton(c+"");
dayss[count].setEnabled(false);
}
}
else if(month==2)
{
int count=0;
for(int i=fd-1 ;i>=0;i--,count++)
{
if(((GregorianCalendar) cal).isLeapYear(cl.YEAR))
{
dayss[count]=new JButton(29-i+"");
dayss[count].setEnabled(false);
}
else
{
dayss[count]=new JButton(28-i+"");
dayss[count].setEnabled(false);
}
}
for(int i=1;i<32;i++,count++)
{
dayss[count]=new JButton(i+"");
}
for(int i=count,c=1;i<42;i++,c++,count++)
{
dayss[count]=new JButton(c+"");
dayss[count].setEnabled(false);
}
}
else if(!b||month==0||month==7||month==0)
{
int count=0;
for(int i=fd-1 ;i>=0;i--,count++)
{
dayss[count]=new JButton(31-i+"");
dayss[count].setEnabled(false);
}
if(month==7||month==0)
for(int i=1;i<32;i++,count++)
{
dayss[count]=new JButton(i+"");
}
else
{
for(int i=1;i<31;i++,count++)
{
dayss[count]=new JButton(i+"");
}
}
for(int i=count,c=1;i<42;i++,c++,count++)
{
dayss[count]=new JButton(c+"");
dayss[count].setEnabled(false);
}
}
else if(month!=1)
{
{
int count=0;
for(int i=fd-1 ;i>=0;i--,count++)
{
dayss[count]=new JButton(30-i+"");
dayss[count].setEnabled(false);
}
for(int i=1;i<32;i++,count++)
{
dayss[count]=new JButton(i+"");
}
for(int i=count,c=1;i<42;i++,c++,count++)
{
dayss[count]=new JButton(c+"");
dayss[count].setEnabled(false);
}
}
}
for(int i=0;i<42;i++)
{
pCal.add(dayss[i]);
}
PCalendar.add(pCal,BorderLayout.CENTER);
}
void updateMonth() {
cal.set(Calendar.DAY_OF_MONTH, 1);
String month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.US);
int year = cal.get(Calendar.YEAR);
monthYear.setText(month + " " + year);
// int startDay = cal.get(Calendar.DAY_OF_WEEK);
// int numberOfDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
monthPanel(cal);
}
}
我希望在按下按钮时获得上个月的正确 GUI。
解决方案
推荐阅读
- react-native - React Native - 离线视频加密+解密
- python-3.x - MADDPG:RuntimeError:梯度计算所需的变量之一已被就地操作修改
- android - 设置 MinifyEnabled 后应用程序崩溃并出现未知错误 - Kotlin
- javascript - 如何自动选择 React Material TextField 的值?
- javascript - 如何在 React JS 中呈现 CKEditor4 wiris MathML 公式
- mysql - 如何根据一对多的关系进行选择?
- r - 根据if语句重复R中的单元格值
- html - 在 VS 中调试 ASP.NET Web 应用程序时未加载图像文件
- html - Boostrap 4.5.2 导航栏下拉菜单出现在错误的位置
- angular - 如何以角度为 bpmn-js 中的一个元素着色