Danke für die bisherigen Antworten. Wie im Eröffnungspost erwähnt, muss ich einen Zimmerbelegungsplan, als Teil eines Hotelbuchnungssystems, erstellen. Dieser beinhaltet einen Kalender. Zum Layout: oben soll ein Datum (Monat, Jahr) ausgewählt werden können, in der Mitte sollen die dazugehörigen Tage (1-31) angezeigt werden. Buchbare Tage werden später farblich dargestellt. Die ComboBox mit der Datumsauswahl kriege ich hin, aber der Kalender in der Mitte... das will nicht funktionieren. Ich bin mal so frei und poste den gesamten Code, den ich bisher habe:
import javax.swing.*;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.Point;
import java.util.Hashtable;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class ZimmerbelegungAnzeigenTest {
public static void main( String[] args ){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel paneltabelle = new JPanel();
JPanel panelauswahl = new JPanel();
JPanel panellegende = new JPanel();
paneltabelle.setBackground(Color.GREEN);
panelauswahl.setBackground(Color.PINK);
panellegende.setBackground(Color.YELLOW);
//Panels erstellen, Farbe ändern
String headers[] = { "Zimmernummer", "Zimmerkategorie", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" };
TableModel model = new MyTableModel(0, headers);
JTable table = new JTable(model);
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
table.getColumn( "Zimmernummer" ).setPreferredWidth( 100 );
table.getColumn( "Zimmerkategorie" ).setPreferredWidth( 100 );
table.getColumn( "1" ).setPreferredWidth( 30 );
table.getColumn( "2" ).setPreferredWidth( 30 );
table.getColumn( "3" ).setPreferredWidth( 30 );
table.getColumn( "4" ).setPreferredWidth( 30 );
table.getColumn( "5" ).setPreferredWidth( 30 );
table.getColumn( "6" ).setPreferredWidth( 30 );
table.getColumn( "7" ).setPreferredWidth( 30 );
table.getColumn( "8" ).setPreferredWidth( 30 );
table.getColumn( "9" ).setPreferredWidth( 30 );
table.getColumn( "10" ).setPreferredWidth( 30 );
table.getColumn( "11" ).setPreferredWidth( 30 );
table.getColumn( "12" ).setPreferredWidth( 30 );
table.getColumn( "13" ).setPreferredWidth( 30 );
table.getColumn( "14" ).setPreferredWidth( 30 );
table.getColumn( "15" ).setPreferredWidth( 30 );
table.getColumn( "16" ).setPreferredWidth( 30 );
table.getColumn( "17" ).setPreferredWidth( 30 );
table.getColumn( "18" ).setPreferredWidth( 30 );
table.getColumn( "19" ).setPreferredWidth( 30 );
table.getColumn( "20" ).setPreferredWidth( 30 );
table.getColumn( "21" ).setPreferredWidth( 30 );
table.getColumn( "22" ).setPreferredWidth( 30 );
table.getColumn( "23" ).setPreferredWidth( 30 );
table.getColumn( "24" ).setPreferredWidth( 30 );
table.getColumn( "25" ).setPreferredWidth( 30 );
table.getColumn( "26" ).setPreferredWidth( 30 );
table.getColumn( "27" ).setPreferredWidth( 30 );
table.getColumn( "28" ).setPreferredWidth( 30 );
table.getColumn( "29" ).setPreferredWidth( 30 );
table.getColumn( "30" ).setPreferredWidth( 30 );
table.getColumn( "31" ).setPreferredWidth( 30 );
//JScrollPane scrollPane = new JScrollPane(table);
//frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
//frame.setSize(1150, 300);
//frame.setVisible(true);
String januar = new String ("Januar");
String februar = new String ("Februar");
String maerz = new String ("März");
String april = new String ("April");
String mai = new String ("Mai");
String juni = new String ("Juni");
String juli = new String ("Juli");
String august = new String ("August");
String september = new String ("September");
String oktober = new String ("Oktober");
String november = new String ("November");
String dezember = new String ("Dezember");
JLabel monatslabel = new JLabel("Monat auswählen:");
JComboBox monatsauswahl = new JComboBox();
monatsauswahl.addItem(januar);
monatsauswahl.addItem(februar);
monatsauswahl.addItem(maerz);
monatsauswahl.addItem(april);
monatsauswahl.addItem(mai);
monatsauswahl.addItem(juni);
monatsauswahl.addItem(juli);
monatsauswahl.addItem(august);
monatsauswahl.addItem(september);
monatsauswahl.addItem(oktober);
monatsauswahl.addItem(november);
monatsauswahl.addItem(dezember);
JLabel jahreslabel = new JLabel("Jahr auswählen:");
JSpinner jahresauswahl = new JSpinner();
jahresauswahl.setValue(2010);
JButton uebernehmen = new JButton("Übernehmen");
JLabel legende = new JLabel("Legende:");
//paneltabelle.setLayout(new GridLayout(100,100));
//panelauswahl.setLayout(new GridLayout(100,100));
//Panels konfigurieren, Layoutmanager wählen
panelauswahl.add(monatslabel);
panelauswahl.add(monatsauswahl);
panelauswahl.add(jahreslabel);
panelauswahl.add(jahresauswahl);
panelauswahl.add(uebernehmen);
//hinzufügen der Elemente zum oberen Panel
//paneltabelle.add();
paneltabelle.add(table);
//hinzufügen der Elemente zum mittleren Panel
panellegende.add(legende);
frame.getContentPane().add(BorderLayout.NORTH, panelauswahl);
frame.getContentPane().add(BorderLayout.CENTER, paneltabelle);
frame.getContentPane().add(BorderLayout.SOUTH, panellegende);
frame.setSize(800, 600);
frame.setVisible(true);
}
}
class MyTableModel extends AbstractTableModel {
private Hashtable lookup;
private final int rows;
private final int columns;
private final String headers[];
public MyTableModel(int rows, String columnHeaders[]) {
if ((rows < 0) || (columnHeaders == null)) {
throw new IllegalArgumentException(
"Invalid row count/columnHeaders");
}
this.rows = rows;
this.columns = columnHeaders.length;
headers = columnHeaders;
lookup = new Hashtable();
}
public int getColumnCount() {
return columns;
}
public int getRowCount() {
return rows;
}
public String getColumnName(int column) {
return headers[column];
}
public Object getValueAt(int row, int column) {
return lookup.get(new Point(row, column));
}
public void setValueAt(Object value, int row, int column) {
if ((rows < 0) || (columns < 0)) {
throw new IllegalArgumentException("Invalid row/column setting");
}
if ((row < rows) && (column < columns)) {
lookup.put(new Point(row, column), value);
}}}
Das letzte Fragment: MyTableModel... der Code ist nicht von mir und ich verstehe ihn auch nicht so recht.
Das Problem ist vorerst, dass mein Center-Panel leer bleibt. Da sollte aber die Tabelle mit den Spalten der Kalendertage 1-31 (von links nach rechts) dargestellt werden. Kann mir jemand weiterhelfen? Dass ich sowas wie ein Java-Anfänger bin, versteht sich von selbst .
Vielen Dank an alle Helfer!