Swing GridLayout

L

Lindau

Gast
Hallo,

ich habe ein JPanel1 mit GridLayout in ein JPanel0 mit BorderLayout.CENTER des JFrame.
Das JPanel1 wird wunderbar vertikal zentriert, jedoch nicht horizontal, wie kann ich die Ausrichtung hinbekommen ? - setAlignmentX will er nicht (muß Component sein).

In dem GridLayout habe ich mehrere JLabel (Array) mit einer Schleife eingefügt.
Ich versuche das Kalendersteuerelement (C#) für mein Programm nachzubauen.
Jetzt möchte ich, daß Samstag und Sonntag die Tage in rot dargestellt werden.
Wie kann ich die Zellen ansprechen ? - In Excel geht es mit Cells(5,7).

Ich möchte keinen fertigen Kalender, da ich diesen noch weiter anpassen möchte.

Es würde mich freuen, wenn mir jemand helfen könnte.

Mfg. Thomas
 

diggaa1984

Top Contributor
Das JPanel1 wird wunderbar vertikal zentriert, jedoch nicht horizontal

klingt ein wenig nach "zuviel Platz drumrum" .. vielleicht mal pack() aufrufen, nachdem alles aufs JFrame gepappt wurde? .. Sollte das schon aufgerufen werden, dann bräuchten wir wohl ein wenig Code.
 

Lindau

Neues Mitglied
Hallo,

das pack(); hat geholfen, danke.

Ich möchte gerne die Wochenenden und Feiertage in roter Schrift und meine Urlaubstage nit einer hellblauen Hintergrundfarbe markieren.
Wenn ich auf ein Tag-Feld klicke soll ein Eingabedialog erscheinen.
Es handelt sich nur um eine Teilaufgabe, die ich später in ein größeres Projekt einbinden möchte.
Ich habe mir zur Übung eine Digitaluhr mit Kalender und weiteren Funktionen vorgestellt (zum privatem Lernen, da ich noch nicht so viel Ahnung von Java habe, die Sprache jedoch ideal ist, um kleine Programmchen für mein Linux zu basteln (Java=unabhängig Windows+Linux).

Hier einmal mein Code für das "Kalendersteuerelement" (nicht lachen, wenn der Code Sch*** ist, bitte helfen):

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.plaf.BorderUIResource;


public class Demo implements ActionListener {
		
	Calendar jetzt;		
	
	private static final long serialVersionUID = 1L;

	
	public Demo()
	{
		Anzeige();	
	}
		
	
	public void Anzeige() 
	{
		JFrame Fenster = new JFrame("Kalender");
		
		JPanel pan0 = new JPanel();
		JPanel pan1 = new JPanel();
		JPanel pan2 = new JPanel();
		
		pan0.setLayout(new BorderLayout());
		pan1.setLayout(new FlowLayout());
		pan2.setLayout(new GridLayout(6,8));
		
		pan2.setBorder(BorderUIResource.getBlackLineBorderUIResource());
		
		String[] Mon = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September","Oktober","November","Dezember"};
		String[] J = {"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018"};	
		
		JComboBox Monat = new JComboBox(Mon);
		JComboBox Jahr = new JComboBox(J);
			
		Calendar jetzt = new GregorianCalendar(Locale.GERMAN);

                     
int AktMonatZahl = jetzt.get(Calendar.MONTH) + 1;
int AktJahr = jetzt.get(Calendar.YEAR);
int AktTag = jetzt.get(Calendar.DAY_OF_MONTH);

		
		String AktMonatText = null;
		
		switch (AktMonatZahl) {
		
		case 1:
			AktMonatText=Mon[0];
			break;
						
		case 2:
			AktMonatText=Mon[1];
			break;
		
		case 3:
			AktMonatText=Mon[2];
			break;
			
		case 4:
			AktMonatText=Mon[3];
			break;
		
		case 5:
			AktMonatText=Mon[4];
			break;
			
		case 6:
			AktMonatText=Mon[5];
			break;
			
		case 7:
			AktMonatText=Mon[6];
			break;
			
		case 8:
			AktMonatText=Mon[7];
			break;
			
		case 9:
			AktMonatText=Mon[8];
			break;
			
		case 10:
			AktMonatText=Mon[9];
			break;
			
		case 11:
			AktMonatText=Mon[10];
			break;
			
		case 12:
			AktMonatText=Mon[11];
			break;
				
		}
		
		
		Monat.setSelectedItem(AktMonatText);
		Jahr.setSelectedItem(AktJahr);
				
		
		pan1.add(Monat);
		pan1.add(Jahr);
		
		JLabel[] Head = new JLabel[7];
		
							
		String[] Ueberschrift = {"Mo","Di","Mi","Do","Fr","Sa","So"};
					
			
		
		for(int i=0; i<Ueberschrift.length; i++)
		{
			Head[i] = new JLabel(Ueberschrift[i]);
			Head[i].setBackground(Color.WHITE);
			Head[i].setOpaque(true);
			pan2.add(Head[i]);
						
		}
		
		
		
		JLabel[] Body = new JLabel[36];
					
		String[] Juli2011 = {"","","","","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"};
		
		
		for(int j=0; j<Juli2011.length; j++)
		{
			Body[j] = new JLabel(Juli2011[j]);
			pan2.add(Body[j]);
						
		}
					
				
		pan2.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						
		pan0.add(pan1, BorderLayout.NORTH);
		pan0.add(pan2, BorderLayout.CENTER);
				
		Fenster.add(pan0);
						
		Fenster.pack();
				
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
		Fenster.setResizable(false);
		
		Fenster.setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new Demo();
	}


	@Override
	public void actionPerformed(ActionEvent ev) {
		
	         // hier soll etwas passieren, wenn das Label gedrückt wird.
                // geht es überhaupt mit einem JLabel oder muß ich einen JButton	nehmen ?
               // JLabel habe ich wegen der Optik genommen.
	}

}



Vielen Dank für Eure Mühe und Geduld.

Mfg. Thomas
 

jgh

Top Contributor
Das beste vorweg: Dein Kalendersteuerelement sieht akzeptabel aus...aber -ganz ehrlich- das war es auch!!!
Hier mal ein kleiner Ansatz, wie man so etwas umsetzen könnte. Per Doppelklick erscheint ein JDialog...ohne weitere Funktionen.
Die Auswahl des Jahres ist nicht implementiert...ein wenig sollst du ja auch noch machen ;)
Ich hoffe das mein Code selbst Doku genug ist. Ansonsten fragen...aber erst versuchen zu verstehen ;)


Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.plaf.BorderUIResource;

public class Demo implements ActionListener, MouseListener {

	Calendar cal;
	JFrame fenster;
	JPanel mainPanel, cbPanel, tagePanel;
	JComboBox cbMonat, cbJahr;
	JLabel[] head, body;
	int startWochentag, tageImMonat;
	final String[] mon = { "Januar", "Februar", "März", "April", "Mai", "Juni",
			"Juli", "August", "September", "Oktober", "November", "Dezember" };
	final String[] ueberschrift = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" };
	private static final long serialVersionUID = 1L;

	public Demo() {
		anzeige();
	}

	public void anzeige() {
		fenster = new JFrame("Kalender");
		mainPanel = new JPanel();
		cbPanel = new JPanel();
		tagePanel = new JPanel();
		mainPanel.setLayout(new BorderLayout());
		cbPanel.setLayout(new FlowLayout());
		tagePanel.setLayout(new GridLayout(7, 7));
		tagePanel.setBorder(BorderUIResource.getBlackLineBorderUIResource());

		String[] jahr = { "2011", "2012", "2013", "2014", "2015", "2016",
				"2017", "2018" };
		cbMonat = new JComboBox(mon);
		cbMonat.addActionListener(this);
		cbJahr = new JComboBox(jahr);
		cal = new GregorianCalendar(Locale.GERMAN);
		cbMonat.setSelectedIndex(cal.get(Calendar.MONTH));

		cbPanel.add(cbMonat);
		cbPanel.add(cbJahr);
		head = new JLabel[7];
		initTagePanel();
		mainPanel.add(cbPanel, BorderLayout.NORTH);
		mainPanel.add(tagePanel, BorderLayout.CENTER);
		fenster.add(mainPanel);
		fenster.pack();
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setLocationRelativeTo(null);
		fenster.setResizable(false);
		fenster.setVisible(true);

	}

	private void initTagePanel() {
		tagePanel.removeAll();
		tagePanel.validate();
		head = new JLabel[7];
		for (int i = 0; i < ueberschrift.length; i++) {
			head[i] = new JLabel(ueberschrift[i]);
			head[i].setBackground(Color.WHITE);
			head[i].setOpaque(true);
			tagePanel.add(head[i]);
		}
		head[5].setForeground(Color.red);
		head[6].setForeground(Color.red);
		body = new JLabel[42];
		calculateDaysInMonth();
		addTageLabelsToTagePanel();
	}

	private void addTageLabelsToTagePanel() {
		for (int i = 1; i < startWochentag; i++) {
			body[i] = new JLabel();
		}
		int tage = 1;
		for (int i = startWochentag; i < tageImMonat + startWochentag; i++) {
			body[i] = new JLabel(tage + "");
			body[i].addMouseListener(this);
			tage++;
		}
		for (int i = startWochentag + tageImMonat; i < body.length; i++) {
			body[i] = new JLabel();
		}
		for (int i = 1; i <= body.length - 1; i++) {
			tagePanel.add(body[i]);
		}
	}

	private void calculateDaysInMonth() {
		int selectedDay = cal.get(Calendar.DAY_OF_MONTH);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		startWochentag = cal.get(Calendar.DAY_OF_WEEK);
		if (startWochentag == 1) {
			startWochentag = 7;
		} else {
			startWochentag = startWochentag - 1;
		}
		int monat = cal.get(Calendar.MONTH);
		while (monat == cal.get(Calendar.MONTH)) {
			cal.add(Calendar.DAY_OF_MONTH, 1);
		}
		cal.add(Calendar.DAY_OF_MONTH, -1);
		tageImMonat = cal.get(Calendar.DAY_OF_MONTH);
		cal.set(Calendar.DAY_OF_MONTH, selectedDay);
	}

	public static void main(String[] args) {
		new Demo();
	}

	@Override
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == cbMonat) {
			cal.set(Calendar.MONTH, cbMonat.getSelectedIndex());
			initTagePanel();
			tagePanel.validate();
			tagePanel.repaint();
		}
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		if (e.getClickCount() == 2) {
			JDialog jd = new JDialog();
			jd.setLayout(new FlowLayout());
			String s = ((JLabel) e.getSource()).getText();
			jd.add(new JLabel("Ausgewält wurde: " + s + ". "
					+ cbMonat.getSelectedItem()));
			jd.setSize(250, 100);
			jd.add(new JTextField(5));
			jd.add(new JButton("OK"));// so fuunzt das natürlich nicht^^
			jd.setModal(true);
			jd.setLocationRelativeTo(null);
			jd.setVisible(true);
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		((JLabel) e.getSource()).setForeground(Color.RED);
		((JLabel) e.getSource()).setBackground(new Color(0, 255, 255));
		((JLabel) e.getSource()).setOpaque(true);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		((JLabel) e.getSource()).setForeground(Color.BLACK);
		((JLabel) e.getSource()).setOpaque(false);
	}

	@Override
	public void mousePressed(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {

	}

}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E GridLayout auf ScrollPane AWT, Swing, JavaFX & SWT 4
thor_norsk GridLayout AWT, Swing, JavaFX & SWT 11
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
pkm kryptisches Verhalten bei GridLayout AWT, Swing, JavaFX & SWT 4
K Swing GridLayout - x und y bei Mausklick ausgeben AWT, Swing, JavaFX & SWT 4
S GridLayout SWT: Anordnung Composites nebeneinander AWT, Swing, JavaFX & SWT 2
B GridLayout - wie am besten implementieren AWT, Swing, JavaFX & SWT 3
B GridLayout Basics AWT, Swing, JavaFX & SWT 1
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
M LayoutManager GridLayout funktioniert nicht AWT, Swing, JavaFX & SWT 0
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
F Gridlayout AWT, Swing, JavaFX & SWT 6
A JPanel oder GridLayout Größe festsetzten AWT, Swing, JavaFX & SWT 4
X GridLayout JPanel austauschen AWT, Swing, JavaFX & SWT 2
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Button in GridLayout AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
L LayoutManager GridLayout verschiebt sich AWT, Swing, JavaFX & SWT 6
B GridLayout AWT, Swing, JavaFX & SWT 6
T Spaltengröße einzelner Spalten in Gridlayout festlegen AWT, Swing, JavaFX & SWT 3
Karuka Abstände im GridLayout ändern AWT, Swing, JavaFX & SWT 8
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
C Scollpane an dynamisches GridLayout anpassen? AWT, Swing, JavaFX & SWT 3
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme mit Gridlayout AWT, Swing, JavaFX & SWT 4
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
Z Swing JButton erweitern/Gridlayout AWT, Swing, JavaFX & SWT 2
lumo LayoutManager SWT GridLayout - Reihenfolge ändern AWT, Swing, JavaFX & SWT 7
C Swing GridLayout: Kann man die Spaltenbreiten variabel gestalten? AWT, Swing, JavaFX & SWT 4
J SWT Größe eines Composite mit Gridlayout festlegen AWT, Swing, JavaFX & SWT 2
Y Kein GantChart in einem GridLayout AWT, Swing, JavaFX & SWT 5
M Formular in GridLayout ? AWT, Swing, JavaFX & SWT 17
R LayoutManager Problem mit GridLayout AWT, Swing, JavaFX & SWT 5
F LayoutManager GridLayout 0/0 auf andere Ecke setzen AWT, Swing, JavaFX & SWT 4
Rudolf Swing Gridlayout und Grouper vorhanden? AWT, Swing, JavaFX & SWT 4
S SWT GridLayout scrollbar machen? AWT, Swing, JavaFX & SWT 7
A Gridlayout Vertikal anordnen AWT, Swing, JavaFX & SWT 6
D LayoutManager GridLayout, 2 labels nebeneinander AWT, Swing, JavaFX & SWT 8
B Swing GridLayout.add über 2 Spalten? AWT, Swing, JavaFX & SWT 7
R LayoutManager GridLayout verändert isch andauernd AWT, Swing, JavaFX & SWT 4
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
B GridLayout und scrollbar AWT, Swing, JavaFX & SWT 5
J Swing Bild in GridLayout AWT, Swing, JavaFX & SWT 8
aze GridLayout: Keine automatische Ausdehnung AWT, Swing, JavaFX & SWT 2
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
M Image an Gridlayout anpassen AWT, Swing, JavaFX & SWT 5
E SWT Problem mit Gridlayout AWT, Swing, JavaFX & SWT 3
G SWT GridLayout AWT, Swing, JavaFX & SWT 2
lumo SWT GridLayout - clear? AWT, Swing, JavaFX & SWT 4
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
N Gridlayout macht Probleme AWT, Swing, JavaFX & SWT 3
L GridLayout verändert festgesetzte Größe der Komponenten AWT, Swing, JavaFX & SWT 12
S Gridlayout - Tabellenzeile "beenden" AWT, Swing, JavaFX & SWT 3
Dragonfire GridLayout Probleme AWT, Swing, JavaFX & SWT 4
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
C JPanel-Array in GridLayout AWT, Swing, JavaFX & SWT 4
G SWT GridLayout AWT, Swing, JavaFX & SWT 3
N Gridlayout 2. Spalte füllen AWT, Swing, JavaFX & SWT 4
W Problem mit GridLayout AWT, Swing, JavaFX & SWT 11
K Problem mit nem GridLayout AWT, Swing, JavaFX & SWT 5
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
M GridLayout mit fester Größe möglich? AWT, Swing, JavaFX & SWT 3
E Einfache Frage zu GridLayout AWT, Swing, JavaFX & SWT 35
G Größe der einzelenen Felder im GridLayout einstellbar? AWT, Swing, JavaFX & SWT 5
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
F GridLayout: verschiedene Spaltenbreiten AWT, Swing, JavaFX & SWT 2
S GridLayout ? AWT, Swing, JavaFX & SWT 5
D AutoResize bei GridLayout ausschalten? AWT, Swing, JavaFX & SWT 2
D GridLayout mit nur einer Spalte, aber n Zeilen AWT, Swing, JavaFX & SWT 2
E GridLayout seltsame Anordnungsstrategie AWT, Swing, JavaFX & SWT 6
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
L Grids benennen beim GridLayout AWT, Swing, JavaFX & SWT 5
S GridLayout mit sehr großen Abständen AWT, Swing, JavaFX & SWT 3
I SWT GridLayout AWT, Swing, JavaFX & SWT 5
V Frage zu GridLayout. AWT, Swing, JavaFX & SWT 3
P SWT GridLayout AWT, Swing, JavaFX & SWT 5
O gridlayout konstante größe AWT, Swing, JavaFX & SWT 3
TRunKX Problem mit dem GridLayout und den proportionen AWT, Swing, JavaFX & SWT 4
P SWT: GridLayout und Textfelder AWT, Swing, JavaFX & SWT 1
M GridLayout funktioniert nicht mehr. AWT, Swing, JavaFX & SWT 2
F GridLayout horizontal ausrichten AWT, Swing, JavaFX & SWT 6
K GridLayout: Colspan, Rowspan AWT, Swing, JavaFX & SWT 2
R GridLayout spinnt AWT, Swing, JavaFX & SWT 14
C leeres Element in Gridlayout einfuegen AWT, Swing, JavaFX & SWT 3
D Problem bei GridLayout und JPanels AWT, Swing, JavaFX & SWT 4
J GridLayout AWT, Swing, JavaFX & SWT 5
H GridLayout: Größe einer Komponente ändern AWT, Swing, JavaFX & SWT 2
L Frage zum GridLayout AWT, Swing, JavaFX & SWT 4
G kann man die aufteilung von GridLayout beeinflussen ? AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben