|
|||||||
|
|
|
![]() |
|
|
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: 23:39.



















