2014-04-13 30 views
5

Ich habe Schwierigkeiten, meinen Header zu bekommen, um auf seiner eigenen Linie zu sein. Die Kopfzeile wird an den Wochentagen angezeigt, anstatt die Kopfzeile und dann unten die Anzahl der Tage im Kalender anzuzeigen. Fehlt ein Panel? Ich habe mehrere Änderungen versucht, aber ich kann nicht wirklich sagen,Kalender GridLayout

package Exercise15_5; 
import java.awt.*; 
import javax.swing.*; 
import java.util.*; 

public class Exercise15_5 extends JFrame { 
    public Exercise15_5(){ 
     //Create panel with gridlayout 
     JPanel calendar = new JPanel(new BorderLayout()); 
     calendar.setLayout(new GridLayout(5,7)); 
     //Add headers 
     String[] headers = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; 
     for(int i = 0; i <7; i++){ 
      calendar.add(new JLabel("" + headers[i])); 
     } 
     //Add days to calendar 
     for(int i = 1; i <31; i++){ 
      calendar.add(new JLabel("" + i)); 
     } 

     JPanel monthHeader = new JPanel(new BorderLayout()); 
     monthHeader.add(new JTextField("\t\t\t04/2014"), BorderLayout.NORTH); 

     monthHeader.add(calendar, BorderLayout.CENTER); 



     add(monthHeader); 
    } 

    public static void main(String[] args) { 
     Exercise15_5 frame = new Exercise15_5(); 
     frame.setTitle("Exercise 15_5"); 
     frame.setSize(600,300); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 


    } 

} 

Antwort

4

Versuchen Sie das Layout Ihres Panel new GridLayout(0,7) statt Einstellung.

Die GridLayout API Zustände die folgenden:

Wenn sowohl die Anzahl der Zeilen und die Anzahl von Spalten haben auf Werte ungleich Null, entweder durch einen Hersteller oder durch die setRows und setColumns Verfahren eingestellt worden ist, Die Anzahl der angegebenen Spalten wird ignoriert. Stattdessen wird die Anzahl der Spalten aus der angegebenen Anzahl der Zeilen und der Gesamtzahl der Komponenten im Layout ermittelt. Wenn beispielsweise für drei Zeilen und zwei Spalten angegeben wurden und dem Layout neun Komponenten hinzugefügt wurden, werden diese als drei Zeilen mit drei Spalten angezeigt. Die Angabe der Anzahl der Spalten wirkt sich nur auf das Layout aus, wenn die Anzahl der Zeilen auf Null gesetzt ist.

+0

Das ist es. Vielen Dank!!! Würdest du zufällig wissen, wie man den Kalender startet, damit er den aktuellen Monat widerspiegelt? Bisher habe ich – MontyMax

+0

@MontyMax: Ich würde es nicht wissen, ich hatte noch nie mit Daten zu arbeiten. [This thread] (http://stackoverflow.com/questions/17232038/calendar-display-using-java-swing) könnte eine Lektüre wert sein, aber der Code ist ein wenig lang. – PakkuDon

2

Ihre row Graf war weg von 1 (aber 0 ist allgemeiner), empfehle ich Ihnen Ihre Konstruktor auch ein wenig aufzuräumen. Vielleicht so,

// Create panel with gridlayout 
JPanel calendar = new JPanel(new GridLayout(6, 7)); // 6 (or 0), not 5. 
// Add headers 
String[] headers = { "Sunday", "Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", 
    "Saturday" }; 
// Use for-each loop. 
for (String header : headers) { 
    calendar.add(new JLabel(header)); 
} 
// Add days to calendar, use String.valueOf 
for (int i = 1; i < 31; i++) { 
    calendar.add(new JLabel(String.valueOf(i))); 
} 

JPanel monthHeader = new JPanel(new BorderLayout()); 
monthHeader.add(new JTextField("\t\t\t04/2014"), 
    BorderLayout.NORTH); 

monthHeader.add(calendar, BorderLayout.CENTER); 

add(monthHeader);