Wie kann ich in Java ein JLabel vor ein anderes stellen?

2 Antworten

Ich hoffe ich darf mich auch kurz zu Wort melden.

Ich hab die Frage ein wenig verfolgt. - Hier ist konzeptionell etwas leicht schief gegangen. 

Sofern ich ein paar Tipps geben darf:

Erstmal allgemein:

  • Die serialVersionUID brauchst du eigentlich nur, wenn die Klasse als Serializable gekennzeichnet ist, was du auch nur dann brauchst, wenn du die Klasse entweder in eine Datei schreiben willst, oder per Stream übermitteln möchtest.
  • Genauso wie man Klassennamen groß schreibt, so schreibt man die variablen klein, das erleichtert einem den Überblick, über Instanz und Klasse.
  • Eine Methode main zu nennen, obwohl es nicht die Ausführende Methode ist, sorgt ebenfalls für Unübersichtlichkeit und Verwirrung

(Sorry, musste das gesagt haben, denn so fällt mir und vielen anderen auch die Nachvollziehbarkeit deines Codes doch schwerer als es sein sollte)

Zu deinem Problem was ich aus dem anderen Kommentar entnahm:

  • Du fügst in der Methode: "Bei Tick" eine extrem hohe anzahl an Labels an. müssen es so viele Labels sein? Oder wäre es dir auch möglich, das Label an der bestimmten Position einfach zu färben?

Hey,

was genau ist jetzt das Problem ? Das die Farbe nicht geändert wird oder das sie nicht übereinander sind ? Kannst du evtl. noch einen Screenshot hochladen ?

Lg,

Benny

also wenn ich den Code, so wie er da steht, ausführe sehe ich nur eine grüne Fläche (das Rechteck). Die erstellten JLabels mit namen Zelle werden allerding von diesem großen, grünen Rechteck überdeckt. Das will ich nicht. Ich will, das die Zelle-Labels über dem grünen Rechteck zusehen sind.

0
@BenStudio

Versuch das Rechteck nach jedem Tick auch neuzuzeichnen bzw. gibt es einen Tiefen-Index den kann man irgendwie ändern weiß grad nicht wie. Das zuerst gezeichnete hat glaub ich irgendwie immer den höchsten oder den niedrigsten versuch mal abwechselnd erst zelle dann rechteck und andersrum zu malen.

1
@Bentipa

Ich habe jetzt den kompletten Code-Abschnitt mit dem Rechteck. in die neueZelle Methode ans Ende gepackt und jetzt geht es, kommt mir aber erxtrem rechenaufwändig vor. Gibst da vielleicht doch noch was einfacheres?

0

Hey ich habe eine Frage, wieso klappt da nicht PaintComponent?

package samitorkamani; import java.awt.; import java.awt.event.;

import javax.swing.*;

public class ZufälligeRechtecke extends JPanel implements ActionListener {

//index entweder: 0,1,10
private int index  = 0;
//Seite des Rechtecks
private int seite = 20;
//width + height
private int width  = (int)(Math.random()*(601-seite));
private int height = (int)(Math.random()*(401-seite));
//Zufällige Farben

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.RED);
    g.fillRect(100, 100, 50, 50);
    //for ( int i = 0 ; i < index ; i++ ) {
    //  g1.setColor(Color.black);
    //  g1.fillRect(width, height, seite, seite);
    //}
}

public ZufälligeRechtecke () {
    
    //Objekte
    JFrame f = new JFrame();
    JPanel p2 = new JPanel();
    JPanel p1 = new JPanel();
    JButton reset = new JButton("Reset!");
    JButton eins = new JButton("1 Rechteck!");
    JButton zehn = new JButton("10 Rechtecke!");
    Box buttons = Box.createHorizontalBox();
    
    //Buttons + Panel
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setTitle("Zufällige Rechtecke");
    p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
    
    //*****************Buttons*****************
    
    //Reset
    buttons.add(Box.createHorizontalGlue());
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(reset);
    reset.addActionListener(this);
    
    //Eins
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(eins);
    eins.addActionListener(this);
    
    //Zehn
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(zehn);
    zehn.addActionListener(this);
    buttons.add(Box.createRigidArea(new Dimension( 50, 0 )));
    buttons.add(Box.createHorizontalGlue());
    
    //*****************Panel*****************
    p2.setPreferredSize(new Dimension(600, 400));
    p2.setBackground(Color.GREEN);
    
    p1.add(buttons);
    p1.add(p2);
    
    //main
    f.setContentPane(p1);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    
}

public static void main(String[] args) {
    new ZufälligeRechtecke();
}

@Override
public void actionPerformed(ActionEvent arg0) {
    
    switch(arg0.getActionCommand()) {
        case "Reset!":
            System.out.println("Reset!");
            index = 0;
            System.out.println(index);
            repaint();
            this.repaint();
            break;
        case "1 Rechteck!":
            System.out.println("1 Rechteck!");
            index = 1;
            System.out.println(index);
            this.repaint();
            break;
        case "10 Rechtecke!":
            System.out.println("10 Rechtecke!");
            index = 10;
            System.out.println(index);
            this.repaint();
            break;
    }
    
}

}

...zur Frage

Warum wird das JLabel nicht angezeigt?

Ich möchte, damit es später nicht so viel auf einmal wird die verschiedenen Bestandteile des JFrames in mehrer Klassen schreiben. In diesem Fall habe ich ein Jframe, in dem ein JPanel geladen wird, in dem ein JLabel ist. Wenn ich das Programm allerdings ausführe, wird das JLabel nicht angezeigt.

Bilder: https://drive.google.com/drive/folders/1CoH93gGGE0h0hOfwpI5dMur3USVmz4sz?usp=sharing

Hier mal die Klassen:

Main.java

import javax.swing.JFrame;

public class Main {

	public static void main(String[] args) {
		JFrame frame = new DiyLoopFrame();
	}
}

DiyLoopFrame.java (das JFrame)

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DiyLoopFrame extends JFrame {
	
	//constructor
	public DiyLoopFrame() {
		setSize(880, 650);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null); 
		setTitle("DiyLoop");
		setResizable(false);
		setLayout(null);
		JPanel fc = new FrameControls();
		
		//components
		add(fc); //add FrameControls
		addKeyListener(new KeyHandler()); //get Keys
		
		//loading complete!
		setFocusable(true); //set focus to jframe
		setVisible(true); //make visible
	}
}

FrameControls.java (das JPanel)

import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class FrameControls extends JPanel {
	
	private JLabel label_schriftart;
	private JLabel label_clickoptions;
	
	public FrameControls() {
		//add components
		initComponents();
		add(label_clickoptions);
		
		//loading complete!
		setVisible(true);
	}
	
	private void initComponents() {
		//schriftart
		label_schriftart = new JLabel("");
		Font schriftart = (label_schriftart.getFont().deriveFont(Font.BOLD, 15));
		
		//label clickoptions
		label_clickoptions = new JLabel("click options");
		label_clickoptions.setFont(schriftart);
		label_clickoptions.setBounds(5, 5, 500, 11);
	}
}

.

...zur Frage

Wie kann ich in Java bei einem JLabel einen Zeilenumbruch erstellen?

Ich möchte die JLabel "Zeile1" und "Zeile2" untereinander schreiben... weiß aber nicht wie ich das anstellen soll

public class Test {
public static void main(String[] args) {
    JFrame fenster = new JFrame();
    setupContent(fenster);
    fenster.setSize(500,500);                                                   
    fenster.setMinimumSize(new Dimension(100,100));                                          
    fenster.setVisible(true);                                                       
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&nbsp; &nbsp; &nbsp;                                    


}

private static void setupContent(JFrame fenster) {
    JPanel content = new JPanel ();
    JLabel Zeile1= new JLabel("Zeile1");
    JLabel Zeile2= new JLabel("das hier soll in die zweite Zeile!");
    content.add(Zeile1);
    content.add(Zeile2);
    fenster.setContentPane(content);
    
}

}


...zur Frage

Wie kann ich bei Java ein Bild als JLabel einfügen?

Mein aktueller Stand:

public class Fenster1 {
  public static void main(String[] args) {
    JFrame fenster = new JFrame();
    setupContent(fenster);

    fenster.setSize(500, 500);
    fenster.setMinimumSize(new Dimension(100, 100));
    fenster.setVisible(true);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  private static void setupContent(JFrame fenster) {
    JPanel content = new JPanel();
    JLabel Bild = new JLabel("hier soll das Bild hinkommen");
    content.add(Bild);
    fenster.setContentPane(content);
  }
}

PS.: Das Bild ist auf dem Desktop unter Bilder als smyley.jpg gespeichert.

...zur Frage

Was möchtest Du wissen?