Hallo alle zusammen,
ich habe folgendes Problem: Ich möchte gerne einen Kalender schreiben und grundsätzlich funktioniert das auch schon ganz gut - zumindest wenn ich den Kalender das erste Mal aufrufe. Beim Wechsel des Monats oder des Jahres ändert sich aber mein GridLayout von 8 Spalten und 7 Zeilen in ein 7x7-Bereich. Ich habe es schon mit setVisible und pack() probiert, aber das hilft mir leider auch nicht. Beim Debuggen behauptet er aber weiterhin, dass sein layout 8 spalten hätte.
Hier mal der Quelltext, vielleicht weiß ja jemand, woran es liegt. Die entsprechende Methode ist
(Ich habe die NetBeans-Swing-Oberfläche dafür genutzt)
Ich hoffe jemand kann mir dabei helfen
Mit freundlichen Grüßen
Svenja
ich habe folgendes Problem: Ich möchte gerne einen Kalender schreiben und grundsätzlich funktioniert das auch schon ganz gut - zumindest wenn ich den Kalender das erste Mal aufrufe. Beim Wechsel des Monats oder des Jahres ändert sich aber mein GridLayout von 8 Spalten und 7 Zeilen in ein 7x7-Bereich. Ich habe es schon mit setVisible und pack() probiert, aber das hilft mir leider auch nicht. Beim Debuggen behauptet er aber weiterhin, dass sein layout 8 spalten hätte.
Hier mal der Quelltext, vielleicht weiß ja jemand, woran es liegt. Die entsprechende Methode ist
Code:
einzeichnenLabels()
Java:
public class Kalender extends javax.swing.JPanel
{
private JLabel[] tage = new JLabel[56];
private int maxLabels = -1;
private GridLayout gL = new GridLayout(7,8);
/**
* Creates new form Kalender
*/
public Kalender() {
initComponents();
fuellenJahresauswahl();
palTage.setLayout(gL);
Calendar c = Calendar.getInstance();
cboMonat.setSelectedIndex(c.get(Calendar.MONTH));
cboJahr.setSelectedItem(String.valueOf(c.get(Calendar.YEAR)));
fuellenKalender();
}
private void einzeichnenLabels()
{
palTage.setVisible(false);
palTage.removeAll();
palTage.setLayout(gL);
palTage.setVisible(true);
for(int i=0; i <= maxLabels; i++)
{
tage[i].setHorizontalAlignment(JLabel.CENTER);
palTage.add(tage[i]);
}
palTage.setVisible(true);
}
private void fuellenJahresauswahl()
{
cboJahr.removeAllItems();
for(int i = 1900; i < 2100; i++)
{
cboJahr.addItem(String.valueOf(i));
}
}
private void fuellenKalender()
{
tage = new JLabel[56];
fuellenUeberschriften();
fuellenTage();
einzeichnenLabels();
palTage.repaint();
}
private void fuellenUeberschriften()
{
tage[0] = new JLabel("");
tage[1] = new JLabel("Mo");
tage[2] = new JLabel("Di");
tage[3] = new JLabel("Mi");
tage[4] = new JLabel("Do");
tage[5] = new JLabel("Fr");
tage[6] = new JLabel("Sa");
tage[7] = new JLabel("So");
}
private void fuellenTage()
{
//Der erste des ausgewählten Monats
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(cboJahr.getSelectedItem().toString()), cboMonat.getSelectedIndex(), 1);
c.get(Calendar.DATE);
c.get(Calendar.MONTH);
c.get(Calendar.YEAR);
int zaehler = 9; // der erste Tag im Monat, der eingetragen werden kann
zaehler = zaehler + wochentag(c.get(Calendar.DAY_OF_WEEK));
for(int i = 8; i <= 56; i++)
{
//Soll eine Woche eingetragen werden oder ein Tag?
if(i % 8 == 0)
{
tage[i] = new JLabel(String.valueOf(c.get(Calendar.WEEK_OF_YEAR)));
}else{
if(i < zaehler)
{
tage[i] = new JLabel("");
}else{
tage[i] = new JLabel(String.valueOf(c.get(Calendar.DAY_OF_MONTH)));
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
//Wenn der Monat sich geändert hat, abbrechen
if(c.get(Calendar.MONTH) != cboMonat.getSelectedIndex())
{
maxLabels = i;
break;
}
}
}
private int wochentag(int dayOfWeek)
{
switch(dayOfWeek)
{
case Calendar.MONDAY : return 0;
case Calendar.TUESDAY : return 1;
case Calendar.WEDNESDAY: return 2;
case Calendar.THURSDAY : return 3;
case Calendar.FRIDAY : return 4;
case Calendar.SATURDAY : return 5;
case Calendar.SUNDAY : return 6;
default: return 0;
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
palAuswahl = new javax.swing.JPanel();
cboMonat = new javax.swing.JComboBox();
cboJahr = new javax.swing.JComboBox();
palTage = new javax.swing.JPanel();
setLayout(new java.awt.BorderLayout());
palAuswahl.setPreferredSize(new java.awt.Dimension(526, 30));
palAuswahl.setLayout(new java.awt.GridLayout(1, 2));
cboMonat.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
cboMonat.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }));
cboMonat.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cboMonatActionPerformed(evt);
}
});
palAuswahl.add(cboMonat);
cboJahr.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
cboJahr.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cboJahrActionPerformed(evt);
}
});
palAuswahl.add(cboJahr);
add(palAuswahl, java.awt.BorderLayout.PAGE_START);
palTage.setLayout(new java.awt.GridLayout());
add(palTage, java.awt.BorderLayout.CENTER);
}// </editor-fold>
private void cboMonatActionPerformed(java.awt.event.ActionEvent evt) {
fuellenKalender();
}
private void cboJahrActionPerformed(java.awt.event.ActionEvent evt) {
fuellenKalender();
}
private javax.swing.JComboBox cboJahr;
private javax.swing.JComboBox cboMonat;
private javax.swing.JPanel palAuswahl;
private javax.swing.JPanel palTage;
}
(Ich habe die NetBeans-Swing-Oberfläche dafür genutzt)
Ich hoffe jemand kann mir dabei helfen
Mit freundlichen Grüßen
Svenja