Results 1 to 4 of 4
- 11-25-2011, 11:34 PM #1
Member
- Join Date
- Nov 2011
- Posts
- 8
- Rep Power
- 0
JComboBox displays incorrect year before clicking on it
Hi!
I've got the strange problem with JComboBox, cause it displays an incorrect year (avg. once per 3 calendar loading) before you click it. If i remove "refreshCalendar" from the last code line than the problem disappears but cannot change year by combo. Thanks in advance for any kind of advice.
Full code length:
Java Code:/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package calendarprogram; /** * * @author AR */ //Import packages import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class CalendarProgram{ static JLabel lblMonth, lblYear; static JButton btnPrev, btnNext; static JTable tblCalendar; static JComboBox cmbYear; static JFrame frmMain; static Container pane; static DefaultTableModel mtblCalendar; //Table model static JScrollPane stblCalendar; //The scrollpane static JPanel pnlCalendar; static int realYear, realMonth, realDay, currentYear, currentMonth; public static void main (String args[]){ //Look and feel try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch (ClassNotFoundException e) {} catch (InstantiationException e) {} catch (IllegalAccessException e) {} catch (UnsupportedLookAndFeelException e) {} ; //Prepare frame frmMain = new JFrame ("Terminarz - Kalendarz"); //Create frame frmMain.setSize(330, 375); //Set size to 400x400 pixels pane = frmMain.getContentPane(); //Get content pane pane.setLayout(null); //Apply null layout frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Close when X is clicked //Create controls lblMonth = new JLabel ("Styczeń"); lblYear = new JLabel ("Zmień rok:"); cmbYear = new JComboBox(); btnPrev = new JButton ("<<"); btnNext = new JButton (">>"); mtblCalendar = new DefaultTableModel(){public boolean isCellEditable(int rowIndex, int mColIndex){return false;}}; tblCalendar = new JTable(mtblCalendar); stblCalendar = new JScrollPane(tblCalendar); pnlCalendar = new JPanel(null); //Set border pnlCalendar.setBorder(BorderFactory.createTitledBorder("Kalendarz")); //Register action listeners btnPrev.addActionListener(new btnPrev_Action()); btnNext.addActionListener(new btnNext_Action()); cmbYear.addActionListener(new cmbYear_Action()); btnPrev.setFocusPainted(false); btnNext.setFocusPainted(false); //Add controls to pane pane.add(pnlCalendar); pnlCalendar.add(lblMonth); pnlCalendar.add(lblYear); pnlCalendar.add(cmbYear); pnlCalendar.add(btnPrev); pnlCalendar.add(btnNext); pnlCalendar.add(stblCalendar); //Set bounds pnlCalendar.setBounds(0, 0, 320, 335); lblMonth.setBounds(160-lblMonth.getPreferredSize().width/2, 25, 100, 25); lblYear.setBounds(10, 305, 80, 20); cmbYear.setBounds(230, 305, 80, 20); btnPrev.setBounds(10, 25, 50, 25); btnNext.setBounds(260, 25, 50, 25); stblCalendar.setBounds(10, 50, 300, 250); //Make frame visible frmMain.setResizable(false); frmMain.setVisible(true); //Get real month/year GregorianCalendar cal = new GregorianCalendar(); //Create calendar realDay = cal.get(GregorianCalendar.DAY_OF_MONTH); //Get day realMonth = cal.get(GregorianCalendar.MONTH); //Get month realYear = cal.get(GregorianCalendar.YEAR); //Get year currentMonth = realMonth; //Match month and year currentYear = realYear; //Add headers String[] headers = {"Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"}; //All headers for (int i=0; i<7; i++){ mtblCalendar.addColumn(headers[i]); } tblCalendar.getParent().setBackground(tblCalendar.getBackground()); //Set background //No resize/reorder tblCalendar.getTableHeader().setResizingAllowed(false); tblCalendar.getTableHeader().setReorderingAllowed(false); //Single cell selection tblCalendar.setColumnSelectionAllowed(true); tblCalendar.setRowSelectionAllowed(true); tblCalendar.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //Set row/column count tblCalendar.setRowHeight(38); mtblCalendar.setColumnCount(7); mtblCalendar.setRowCount(6); //Populate table for (int i=realYear-100; i<=realYear+100; i++){ cmbYear.addItem(String.valueOf(i)); } //Refresh calendar refreshCalendar (realMonth, realYear); //Refresh calendar } public static void refreshCalendar(int month, int year){ //Variables String[] months = {"Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"}; int nod, som; //Number Of Days, Start Of Month //Allow/disallow buttons btnPrev.setEnabled(true); btnNext.setEnabled(true); if (month == 0 && year <= realYear-10){btnPrev.setEnabled(false);} //Too early if (month == 11 && year >= realYear+100){btnNext.setEnabled(false);} //Too late lblMonth.setText(months[month]); //Refresh the month label (at the top) lblMonth.setBounds(160-lblMonth.getPreferredSize().width/2, 25, 180, 25); //Re-align label with calendar cmbYear.setSelectedItem(String.valueOf(year)); //Select the correct year in the combo box //Clear table for (int i=0; i<6; i++){ for (int j=0; j<7; j++){ mtblCalendar.setValueAt(null, i, j); } } //Get first day of month and number of days GregorianCalendar cal = new GregorianCalendar(year, month, 1); nod = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); som = cal.get(GregorianCalendar.DAY_OF_WEEK); //Draw calendar for (int i=1; i<=nod; i++){ int row = new Integer((i+som-2)/7); int column = (i+som-2)%7; mtblCalendar.setValueAt(i, row, column); } //Apply renderers tblCalendar.setDefaultRenderer(tblCalendar.getColumnClass(0), new tblCalendarRenderer()); } static class tblCalendarRenderer extends DefaultTableCellRenderer{ public Component getTableCellRendererComponent (JTable table, Object value, boolean selected, boolean focused, int row, int column){ super.getTableCellRendererComponent(table, value, selected, focused, row, column); if (column == 0 || column == 6){ //Week-end setBackground(new Color(255, 220, 220)); } else{ //Week setBackground(new Color(255, 255, 255)); } if (value != null){ if (Integer.parseInt(value.toString()) == realDay && currentMonth == realMonth && currentYear == realYear){ //Today setBackground(new Color(220, 220, 255)); } } setBorder(null); setForeground(Color.black); return this; } } static class btnPrev_Action implements ActionListener{ public void actionPerformed (ActionEvent e){ if (currentMonth == 0){ //Back one year currentMonth = 11; currentYear -= 1; } else{ //Back one month currentMonth -= 1; } refreshCalendar(currentMonth, currentYear); } } static class btnNext_Action implements ActionListener{ public void actionPerformed (ActionEvent e){ if (currentMonth == 11){ //Foward one year currentMonth = 0; currentYear += 1; } else{ //Foward one month currentMonth += 1; } refreshCalendar(currentMonth, currentYear); } } static class cmbYear_Action implements ActionListener{ public void actionPerformed (ActionEvent e){ if (cmbYear.getSelectedItem() != null){ String b = cmbYear.getSelectedItem().toString(); currentYear = Integer.parseInt(b); refreshCalendar(currentMonth, currentYear); } } } }
-
Re: JComboBox displays incorrect year before clicking on it
This is nothing more than a swag (silly wild-a...'d guess), but what if you add your JComboBox's ActionListener after adding all the data and selecting the current year?
- 11-25-2011, 11:53 PM #3
Member
- Join Date
- Nov 2011
- Posts
- 8
- Rep Power
- 0
Re: JComboBox displays incorrect year before clicking on it
that swapping places has helped... thx
-
Re: JComboBox displays incorrect year before clicking on it
Cool, you're welcome!
Similar Threads
-
Touch Displays
By Ciwan in forum New To JavaReplies: 4Last Post: 10-21-2010, 09:47 AM -
What in my function incorrect?
By artemff in forum New To JavaReplies: 5Last Post: 01-02-2010, 04:25 PM -
Activate JComboBox 1 when object is selected in JComboBox 2...
By bahumbaba in forum AWT / SwingReplies: 2Last Post: 12-10-2009, 01:58 PM -
Date of first day, given the week in the year and the year...
By Lee.J.Baxter in forum Advanced JavaReplies: 1Last Post: 08-26-2009, 08:48 AM -
Incorrect Package? Help!
By chaits86 in forum NetBeansReplies: 10Last Post: 12-17-2008, 03:08 AM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks