按下jbutton时javaswing更改jtables内容

dsf9zpds  于 2021-07-07  发布在  Java
关注(0)|答案(0)|浏览(299)

我试着用JavaSwing开发一个日历应用程序,我有两个JComboBox来选择年份和月份,还有一个jbutton。当按下jbutton时,我的日历应该出现并显示所选年份的所选月份。当选择其他年份和月份时,按下按钮,我的日历应该显示新选择的月份。但我的日历只有在第一次点击按钮时才起作用,之后我的日历数据不会改变。下面是calendartable类的代码和一个简单的示例。有人能帮我找到问题吗?
日历表类:

  1. import java.util.Calendar;
  2. import java.util.Date;
  3. import javax.swing.table.AbstractTableModel;
  4. public class Calendartable extends AbstractTableModel{
  5. public static String[] COLUMN_NAMES = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
  6. private int tablerows = 0;
  7. private Date startOfWeek;
  8. private Date startDate;
  9. private Date endDate;
  10. public Calendartable(Date start, Date end) {
  11. this.startDate=start;
  12. this.endDate=end;
  13. Calendar cal = Calendar.getInstance();
  14. cal.setTime(startDate);
  15. int i=0;
  16. while (cal.getTime().before(endDate)) {
  17. cal.add(Calendar.DATE, 7);
  18. tablerows++;
  19. }
  20. tablerows++;
  21. if (tablerows > 0) {
  22. cal.setTime(startDate);
  23. while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
  24. cal.add(Calendar.DATE, -1);
  25. }
  26. startOfWeek = cal.getTime();
  27. }
  28. }
  29. @Override
  30. public int getRowCount() {
  31. return tablerows;
  32. }
  33. @Override
  34. public int getColumnCount() {
  35. return 7;
  36. }
  37. @Override
  38. public Class<?> getColumnClass(int columnIndex) {
  39. return Date.class;
  40. }
  41. @Override
  42. public String getColumnName(int column) {
  43. return COLUMN_NAMES[column];
  44. }
  45. @Override
  46. public Object getValueAt(int rowIndex, int columnIndex) {
  47. Date date = null;
  48. if (startOfWeek != null) {
  49. Calendar cal = Calendar.getInstance();
  50. cal.setTime(startOfWeek);
  51. int day = (rowIndex * 7) + columnIndex;
  52. cal.add(Calendar.DATE, day);
  53. if (cal.getTime().before(startDate) || cal.getTime().after(endDate)) {
  54. date = null;
  55. } else {
  56. date = cal.getTime();
  57. }
  58. }
  59. return date;
  60. }
  61. }

再举个例子:

  1. import java.awt.CardLayout;
  2. import java.awt.GridBagConstraints;
  3. import java.awt.GridBagLayout;
  4. import java.awt.Insets;
  5. import java.text.ParseException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;
  8. import javax.swing.JButton;
  9. import javax.swing.JComboBox;
  10. import javax.swing.JFrame;
  11. import javax.swing.JLabel;
  12. import javax.swing.JPanel;
  13. import javax.swing.JScrollPane;
  14. import javax.swing.JTable;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. public class Calendar2 {
  18. JFrame frame = new JFrame("Calendar");
  19. JPanel panelCont = new JPanel();
  20. JPanel panelFirst = new JPanel(new GridBagLayout());
  21. JTable table;
  22. JButton showbuttonmonth=new JButton("Show");
  23. JComboBox jcbyear;
  24. JComboBox<String> jcbmonth;
  25. CardLayout cl = new CardLayout();
  26. Object month[]=new Object[12];{
  27. month[0]="January";
  28. month[1]="February";
  29. month[2]="March";
  30. month[3]="April";
  31. month[4]="May";
  32. month[5]="June";
  33. month[6]="July";
  34. month[7]="August";
  35. month[8]="September";
  36. month[9]="October";
  37. month[10]="November";
  38. month[11]="December";
  39. }
  40. Object year[]=new Object[30];{
  41. for(int i=2010;i<=2039;i++)
  42. year[i-2010]=i;
  43. }
  44. public Calendar2() {
  45. panelCont.setLayout(cl);
  46. GridBagConstraints gbc=new GridBagConstraints();
  47. gbc.insets=new Insets(5,5,5,5);
  48. jcbyear=new JComboBox(year);
  49. gbc.insets=new Insets(15,0,0,5);
  50. gbc.gridx=0;
  51. gbc.gridy=2;
  52. panelFirst.add(new JLabel("Year:"),gbc);
  53. gbc.insets=new Insets(0,0,5,5);
  54. gbc.gridx=0;
  55. gbc.gridy=3;
  56. panelFirst.add(jcbyear, gbc);
  57. gbc.insets=new Insets(15,0,0,5);
  58. gbc.gridx=1;
  59. gbc.gridy=2;
  60. panelFirst.add(new JLabel("Month:"),gbc);
  61. jcbmonth=new JComboBox(month);
  62. gbc.insets=new Insets(0,0,5,5);
  63. gbc.gridx=1;
  64. gbc.gridy=3;
  65. panelFirst.add(jcbmonth, gbc);
  66. gbc.gridx=2;
  67. gbc.gridy=3;
  68. panelFirst.add(showbuttonmonth, gbc);
  69. gbc.gridx=1;
  70. gbc.gridy=4;
  71. SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy");
  72. Date startDate = null;
  73. try {
  74. startDate = sdf.parse("1.1.2010");
  75. } catch (ParseException e) {
  76. // TODO Auto-generated catch block
  77. e.printStackTrace();
  78. }
  79. Date endDate = null;
  80. try {
  81. endDate = sdf.parse("1.31.2010");
  82. } catch (ParseException e) {
  83. // TODO Auto-generated catch block
  84. e.printStackTrace();
  85. }
  86. table = new JTable(new Calendartable(startDate, endDate));
  87. panelFirst.add(new JScrollPane(table), gbc);
  88. panelCont.add(panelFirst, "1");
  89. cl.show(panelCont, "1");
  90. showbuttonmonth.addActionListener(new ActionListener() {
  91. @Override
  92. public void actionPerformed(ActionEvent arg0) {
  93. int year = Integer.parseInt(String.valueOf(jcbyear.getSelectedItem()));
  94. int month=jcbmonth.getSelectedIndex()+1;
  95. String start=month+".1."+year;
  96. String end=month+".31."+year;
  97. gbc.gridx=1;
  98. gbc.gridy=4;
  99. SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy");
  100. Date startDate = null;
  101. try {
  102. startDate = sdf.parse(start);
  103. } catch (ParseException e) {
  104. // TODO Auto-generated catch block
  105. e.printStackTrace();
  106. }
  107. Date endDate = null;
  108. try {
  109. endDate = sdf.parse(end);
  110. } catch (ParseException e) {
  111. // TODO Auto-generated catch block
  112. e.printStackTrace();
  113. }
  114. table = new JTable(new Calendartable(startDate, endDate));
  115. panelFirst.add(new JScrollPane(table), gbc);
  116. }
  117. });
  118. }
  119. public static void main(String[] args) {
  120. Calendar2 cal=new Calendar2();
  121. }
  122. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题