2014-04-13 1 views
5

Ho difficoltà a ottenere l'intestazione sulla propria linea. L'intestazione viene eseguita nei giorni della settimana invece di mostrare l'intestazione e quindi in basso il numero di giorni nel calendario. Manca un pannello? Ho provato più modifiche, ma non posso davvero direCalendar 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); 


    } 

} 

risposta

4

provare a impostare il layout del pannello per new GridLayout(0,7) invece.

I GridLayout API indica:

Quando sia il numero di righe e il numero di colonne sono state impostate a valori diversi da zero, sia da un costruttore o dai setRows e metodi SetColumns, il numero di colonne specificato viene ignorato. Invece, il numero di colonne è determinato dal numero specificato di righe e dal numero totale di componenti nel layout. Pertanto, per l'esempio , se sono state specificate tre righe e due colonne e nove componenti vengono aggiunti al layout, verranno visualizzati come tre righe di tre colonne. La specifica del numero di colonne influisce sul layout solo quando il numero di righe è impostato su zero.

+0

Questo è tutto. Grazie!!! Sapresti come avviare il calendario in modo che rifletta il mese corrente? finora ho – MontyMax

+0

@MontyMax: non saprei, non ho mai dovuto lavorare con date prima. [Questo thread] (http://stackoverflow.com/questions/17232038/calendar-display-using-java-swing) potrebbe valere una lettura ma il codice è un po 'lungo. – PakkuDon

2

tuo conteggio row era fuori dal 1 (ma 0 è più generale), vi consiglio anche a ripulire il costruttore di un po '. Forse così,

// 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);