|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2006
Messaggi: 102
|
[Java] Cambiare mese nel mio calendario
Ciao a tutti, devo realizzre per un esame universitario un calendario/agenda.
Mi sono trovato davante ad uno scoglio che non riesco a superare. ho creato una classe che prende in ingeresso il mese e l'anno e restituisce una matrice 5x7 contentente i giorni del calendario per inserirli poi all'interno di una jTable....fin qui tutto ok. sopra alla tabella ho creato 2 jButton per passare rispettivamente al mese precedente ed a quello successivo. il tutto inserito all'interno di una classe che estende JFrame. il problema è che non so cosa inserire nel metodo actionPerformed. L'unica cosa che mi è venuta in mente è istanziare di nuovo la classe che estende il jframe, ma in questo modo mi crea una nuova finestra. per farvi capire meglio allego una parte del codice Codice:
public class LeftFrame extends JFrame implements ActionListener{ public Container container; public LeftFrame(int Month, int Year){ GridBagLayout layout = new GridBagLayout(); GridBagConstraints lim = new GridBagConstraints(); container = new JPanel(); container.setLayout(layout); JButton prevButton = new JButton("<"); prevButton.setPreferredSize(new Dimension(50, 10)); lim.gridx = 0; lim.gridy = 0; container.add(prevButton,lim); prevButton.addActionListener(this); JButton next = new JButton(">"); next.setPreferredSize(new Dimension(50, 10)); lim.gridx = 2; lim.gridy = 0; lim.anchor = GridBagConstraints.EAST; container.add(next,lim); JLabel monthLabel = new JLabel(); lim.gridx = 1; lim.gridy = 0; lim.anchor = GridBagConstraints.CENTER; container.add(monthLabel,lim); JTable jTable1 = new JTable(); JScrollPane jScrollPane1 = new JScrollPane(); lim.gridx = 0; lim.gridy = 1; lim.gridwidth = 3; lim.gridheight = 1; jScrollPane1.setPreferredSize(new Dimension(170, 110)); jTable1.setModel(new DefaultTableModel( new Object [][] { {mat[0][0], mat[0][1], mat[0][2], mat[0][3], mat[0][4], mat[0][5], mat[0][6]},.... vi risparmio la costruzione della tabella. .... jScrollPane1.setViewportView(jTable1); container.add(jScrollPane1,lim); Container contPane = this.getContentPane(); contPane.add(container, BorderLayout.CENTER); this.pack(); public void actionPerformed(ActionEvent e) { } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { GregorianCalendar gc = new GregorianCalendar(); int Year = gc.get(Calendar.YEAR); int Month = gc.get(Calendar.MONTH); new LeftFrame(Month,Year).setVisible(true); } }); } } Sicuramente c'è qualche errore di fondo. ![]() Accetto qualsiasi tipo di consiglio. Grazie Mille |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
E' corretta l'intuizione secondo cui quello che dovresti fare è un po' quello che fai nel costruttore ed è anche giusto dire che, tuttavia, il costruttore non lo puoi più usare.
Ciò che puoi fare è ripetere nell'actionPerformed quella parte del costruttore che si occupa di riempire i diversi controlli che hai nella tua finestra con i valori che dipendono dal mese scelto. A conti fatti direi che si tratta di cambiare il testo nell'etichetta "monthLabel" e rigenerare il contenuto della tabella, vale a dire creare un nuovo DefaultTableModel, ficcarci dentro i giorni e poi chiamare jTable1.setModel(il nuovo modello). Al limite puoi riciclare il modello esistente e usare setValueAt sulla tabella, cambia poco. Per ragioni di integrità - a naso direi che l'actionPerformed è contenuto nell'ambito delle variabili locali jTable1 e monthLabel - sia jTable1 che monthLabel dovranno essere dichiarati final. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2006
Messaggi: 102
|
Grazie gentilissimo!!
comunque ho risolto raggionando in modo simile a te. ho creato un metodo updateTable() in cui rifaccio calcolare la matrice con i giorni del calendario e ricreo DefaultTableModel passandogli i nuovi valori della matrice. questa è solo una piccola parte del progetto. Se in questi giorni mi servirà di nuovo aiuto mi rivolgero a voi esperti ![]() Per ora grazie. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:08.