Swing Labels & Buttons auf Frame

Kilinat

Aktives Mitglied
Hi Community 😉

Hab mich gestern das erste mal in Swing eingearbeitet und wollte erstmal so ein kleines Horoskop Programm schreiben mit ein paar Buttons und Labels.

Nun, ich hab auch schon die Buttons und die Labels fertig, nur ich bring nicht beide auf einmal auf das Frame.

Mit
Java:
setContentPane(feld);
		setContentPane(text);
zeigt er mir dann nur den Text in mitten des Fensters an.
(Wobei hier die Variable feld mein Panel ist und text mein Label.

Hab ich irgendwie nen Denkfehler oder so?
Und könnt ihr mir sagen, wie ich beide gleichzeitig auf mein Frame bekomme ?!

Danke schon im Vorraus.

MfG Kilinat
 
Ja hast du. *g*.

Mit setContentPane(...) setzt du (einmalig und überschreibend) den gesamten Inhalt des Frames. Du must erst das gesamte Layout auf ein Panel packen und dann mit setContentPane das Panel rein setzten. Order du nimmst getContentPane().Add(..) und fügst so deine Componenten hinzu. Da musst du aber sicher sein, dass die ContentPane dein gewünschtes Layout hat.
 
Danke erstmal für eure Antworten 😉

Werd ich morgen weiter einabauen. Hab aber noch eine weiter Frage und zwar:

Bei den meisten Projekten die ich anlege, bekomme ich diese "Fehlermeldung" :

The serializable class xxx does not declare a static final serialVersionUID field of type long.

Kann das Programm ganz normal ausführen. Nur manchmal wenn ich es speichere ist die Java-Datei am nächsten Tag nicht mehr da. Komplett komisch.

Hoffe ihr könnt mir was dazu sagen 😀

MfG Kilinat
 
Danke erstmal - nun raste ich aber gleich aus 😀

Öffne heute mein Eclipse, will mein Programm starten und auf einmal kommt das:

Editor does not contain a main type

Hab an dem Programm nichts geändert, außer 2 neue ActionEvents hinzugefügt. Und main is auch vorhanden. Hier mal der Code.

Java:
package klempner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Klempner extends JFrame implements ActionListener {
	
	private JButton knopf1, knopf2;
	private JPanel grp1, grp2, grp3;
	private Box oben, unten, knoepfe;
	private JTextField eingabe;
	private JLabel anzeige;
	private JScrollBar schieber;
	
	final int max = 10;
	private String[] diagnose = new String[max];
	private int nr;
	
	public void createComponents(){
		knopf1 = new JButton("Neu");
		knopf2 = new JButton("Fertig");
		grp1 = new JPanel();
		grp2 = new JPanel();
		grp3 = new JPanel();
		oben = Box.createHorizontalBox();
		unten = Box.createHorizontalBox();
		knoepfe = Box.createHorizontalBox();
		eingabe = new JTextField("",28);
		anzeige = new JLabel("");
		schieber = new JScrollBar (Adjustable.HORIZONTAL);
		knopf1.addActionListener(this);
		knopf2.addActionListener(this);
	}
	
	public void setFormLayout(){
		knopf1.setFont(new Font("Comic Sans MS", Font.PLAIN, 22));
		knopf2.setFont(new Font("Comic Sans MS", Font.PLAIN, 22));
		grp1.setPreferredSize(new Dimension (430,70));
		grp2.setPreferredSize(new Dimension (430,70));
		grp3.setPreferredSize(new Dimension (430,70));
		oben.setPreferredSize(new Dimension (430,10));
		unten.setPreferredSize(new Dimension(430,10));
		grp1.setBorder(BorderFactory.createTitledBorder("Das sagst du mir:"));
		grp2.setBorder(BorderFactory.createTitledBorder("Das sag ich dir:"));
		grp3.setBorder(BorderFactory.createTitledBorder("Diagnose-Manipulator:"));
		anzeige.setFont(new Font("Comic Sans MS", Font.PLAIN, 18));
		eingabe.setFont(new Font("Comic Sans MS", Font.PLAIN, 18));
		schieber.setPreferredSize(new Dimension(390,25));
		
	}
	
	public void getDiagnosetext(){
		diagnose[0] = "Hm..";
		diagnose[1] = "Das ist ein Ding!";
		diagnose[2] = "Sieh mal an!";
		diagnose[3] = "Was soll ich sagen?";
		diagnose[4] = "Tatsächlich?";
		diagnose[5] = "So geht es dir also.";
		diagnose[6] = "Du hast Probleme.";
		diagnose[7] = "Das kann ich verstehen.";
		diagnose[8] = "Ich bin sprachlos.";
		diagnose[9] = "Na ja...";
	}
	
	public Klempner(){
		super("Seelenklempner");
		createComponents();
		setFormLayout();
		JPanel panel = new JPanel();
		knoepfe.add (knopf1);
		knoepfe.add (knopf2);
		grp1.add(eingabe);
		grp2.add(anzeige);
		grp3.add(schieber);
		panel.add (oben);
		panel.add (grp1);
		panel.add (grp2);
		panel.add (grp3);
		panel.add (unten);
		panel.add (knoepfe);
		setContentPane(panel);
		getDiagnosetext();
	}
	
	public void actionPerformed(ActionEvent event){
		Object quelle = event.getSource();
		if(quelle == knopf2){ // Fertig Button
			nr = (int)(Math.random()*max);
			anzeige.setText(diagnose[nr]);
		}
		if(quelle == knopf1){ // Neu Button
			eingabe.setText("");
			anzeige.setText("");
			eingabe.requestFocus();
		}
	}

	
	public static void main(String[] args) {
		Klempner fenster = new Klempner ();
		fenster.setSize(450,400);
		fenster.setVisible(true);
		fenster.setDefaultCloseOperation(EXIT_ON_CLOSE);
		

	}

}


/edit: Ich hatte ein anderes Projekt ausgewählt und wollte in diesem Projekt compilieren.^^

MfG Kilinat
 
Zuletzt bearbeitet:
Hi Community 😉

Hab mich gestern das erste mal in Swing eingearbeitet und wollte erstmal so ein kleines Horoskop Programm schreiben mit ein paar Buttons und Labels.

Nun, ich hab auch schon die Buttons und die Labels fertig, nur ich bring nicht beide auf einmal auf das Frame.

Mit
Java:
setContentPane(feld);
		setContentPane(text);
zeigt er mir dann nur den Text in mitten des Fensters an.
(Wobei hier die Variable feld mein Panel ist und text mein Label.

Hab ich irgendwie nen Denkfehler oder so?
Und könnt ihr mir sagen, wie ich beide gleichzeitig auf mein Frame bekomme ?!

Danke schon im Vorraus.

MfG Kilinat

Gut, dass ich das Thema gefunden habe, ich wollte gerade ein neues öffnen. Ich hatte eigentlich das gleiche Problem wie du - alles fertig, nur die Labels kann man nicht aufs Frame setzen. Mit getContentPane().Add(..) hat es bei mir endlich geklappt. Danke!
 

Zurück
Oben