jcomponent wird nicht angezeigt

T7V

Aktives Mitglied
Hi,
ich möchte in einem JFrame unter anderem eine überschriebene JComponent (MyComponent) anzeigen. In dem JComponent zeichne ich selbst ein Labyrinth.

Ich habe in dem JFrame insgesamt 4 JPanels. Der erste enthält die anderen drei. Mit diesem verwende ein BoxLayout.

Die anderen drei unterteilen dann den JFrame in einen oberen, mittleren und unteren Teil.

Im mittleren Teil sind ein JTextArea und MyComponent. MyComponent wird aber nicht angezeigt.

Ich nehme an, dass der BoxLayout-Manager das Problem ist. Der verträgt sich vermutlich nicht mit der Art wie ich das Zeichnen mache.
Muss ich den LayoutManager ganz rausnehmen und die Positionen der einzelnen Komponenten manuell angeben oder lässt sich das besser machen? Oder hab ich einen anderen Fehler gemacht?

Ich habe sowohl bei google als auch hier im Forum gesucht, komme aber einfach nicht drauf.

PS: Lässt sich ein Labyrinth eigentlich auch besser darstellen als mit Linien zeichnen.


MainFrame:
Java:
import javax.swing.*;
import java.awt.event.*;

public class MainFrame extends JFrame implements ActionListener{
	
	static JLabel header; 
	
	static JTextArea area;
	static MyComponent map;
	
	static JTextField input;
	static JButton button;
	
	static JPanel gesamt;
	
	static JPanel oben;
	static JPanel mitte;
	static JPanel unten;	
	
	public MainFrame(){		
		
		super("MainFrame");
		
		gesamt = new JPanel();
		gesamt.setLayout(new BoxLayout(gesamt, BoxLayout.PAGE_AXIS));
		
		
		this.add(gesamt);
		this.setResizable(true);
		
		setSize(750,500);
		setLocation(250,300);
		
		start();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	public void setMap(int h, int w, int[][][] cave){				
		
		map = new MyComponent(h,w, cave);
		
		map.setVisible(true);
		map.repaint();
		
		mitte.add(map);
		mitte.repaint();
		
		setVisible(true);
	}
	
	
	private void start(){
		
		oben = new JPanel();
		oben.setVisible(true);
		
		mitte = new JPanel();
		mitte.setVisible(true);
		
		unten = new JPanel();
		unten.setVisible(true);
		
		header = new JLabel("MainFrame:  ");		
		
		area = new JTextArea("... \n",16 ,28 );
		area.setEditable(false);
		
		input = new JTextField("");
		input.setColumns(20);
		input.setEditable(true);
		
		button = new JButton("klick");
		button.addActionListener(this);
		
		oben.add(header);
		
		mitte.add(area);
		
		unten.add(input);
		unten.add(button);
		
		gesamt.add(header);
		gesamt.add(mitte);
		gesamt.add(unten);
				
	}
	

	
	public void actionPerformed(ActionEvent e){
		
		
	}
	
	
}
MyComponent:
Java:
import javax.swing.*;
import java.awt.*;

public class MyComponent extends JComponent {
	
	int hoehe;
	int weite;
	
	int start_x = 450;
	int start_y = 100;
	
	int feld[][][];	
	
	static final int ABSTAND = 75;
	
	public MyComponent(int h, int w, int[][][] f){
		
		hoehe = h;
		weite = w;
		feld = f;
		
	}
    
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        
        int x = start_x + ABSTAND/2,
            y = start_y + ((hoehe-1)*ABSTAND)+(ABSTAND/2);

        
        for(int i = 0; i != hoehe; i++){
			
			for(int j = 0; j != weite; j++){
				
				if(feld[i][j][0] == 1){
					g.drawLine(x - ABSTAND/2, y - ABSTAND/2,x + ABSTAND/2 , y - ABSTAND/2);
				}
				if(feld[i][j][1] == 1){
					g.drawLine(x + ABSTAND/2, y + ABSTAND/2,x + ABSTAND/2 , y - ABSTAND/2);
				}
				if(feld[i][j][2] == 1){
					g.drawLine(x - ABSTAND/2, y + ABSTAND/2,x + ABSTAND/2 , y + ABSTAND/2);
				}
				if(feld[i][j][3] == 1){
					g.drawLine(x - ABSTAND/2, y - ABSTAND/2,x - ABSTAND/2 , y + ABSTAND/2);
				}				
				
				x += ABSTAND;
				
			}
			
			x = start_x + ABSTAND/2;
			y -= ABSTAND;
		}
    }
}
Test:
Java:
public class Test {

	public static void main(String[] args) {
		
		MainFrame mf = new MainFrame();
		
		int [][][] a = {{{1,0,1,1,0,0},{1,0,1,0,0,0},{0,1,1,0,0,0}},
			    		{{0,0,1,1,0,1},{1,0,1,0,0,0},{0,1,0,0,0,0}},
			    		{{1,1,0,1,0,0},{1,0,1,1,1,0},{1,1,0,0,0,0}}};
		
		mf.setMap(3,3,a);
		


	}

}
Edit: da war noch eine andere test-klasse im test...
 
Zuletzt bearbeitet:

njans

Top Contributor
Meine Vermutung wäre, dass dir das FlowLayout, welches standardgemäß verwendet wird, einen Strich durch die Rechnung macht.
Du solltest mal probieren, deinen unter Panels (oben, mitte, unten, etc.) mal ein Borderlayout zu verpassen und dann die Componenten, die du auf diese Panels legst, mit BorderLayoz.CENTER, richtig skalieren zu lassen.

Nebenbei:
Java:
oben.setVisible(true);
Die kannst du dir alle sparen. Ruf einmal setVisible auf deinem Frame auf, wenn alles fertig ist. Dieser Aufruf gehört aber nicht in die Klasse, sondern sollte von außen aufgerufen werden.
 

T7V

Aktives Mitglied
Danke für deine Antwort.
Leider scheint das aber nicht das Problem zu sein.

Ich habe das mit dem BorderLayout ausprobiert. Das Labyrinth wird trotzdem nicht angezeigt.

geändertes Mainframe:
Java:
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.event.*;

public class MainFrame extends JFrame implements ActionListener{
	
	static JLabel header; 
	
	static JTextArea area;
	static MyComponent map;
	
	static JTextField input;
	static JButton button;
	
	static JPanel gesamt;
	
	static JPanel oben;
	static JPanel mitte;
	static JPanel unten;	
	
	public MainFrame(){		
		
		super("MainFrame");
		
		gesamt = new JPanel();
		gesamt.setLayout(new BoxLayout(gesamt, BoxLayout.PAGE_AXIS));
		
		
		add(gesamt);
		setResizable(true);
		
		setSize(750,500);
		setLocation(250,300);
		
		start();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void setMap(int h, int w, int[][][] cave){				
		
		map = new MyComponent(h,w, cave);
		
		//map.repaint();
		
		mitte.add(map,  BorderLayout.EAST); 		//map hinzufügen
		//mitte.repaint();
		
		setVisible(true);
	}
	
	
	private void start(){
		
		oben = new JPanel();		
		mitte = new JPanel();		
		unten = new JPanel();
		
		mitte.setLayout(new BorderLayout());		//BorderLayout setzen
		//oben.setLayout(new BorderLayout());
		//unten.setLayout(new BorderLayout());
		
		header = new JLabel("MainFrame:  ");		
		
		area = new JTextArea("... \n",16 ,28 );
		area.setEditable(false);
		
		input = new JTextField("");
		input.setColumns(20);
		input.setEditable(true);
		
		button = new JButton("klick");
		button.addActionListener(this);
		
		oben.add(header);
		//oben.add(header,BorderLayout.CENTER);
		
		mitte.add(area, BorderLayout.WEST);			//area hinzufügen
		
		unten.add(input);
		unten.add(button);
		//unten.add(input,BorderLayout.WEST);
		//unten.add(button,BorderLayout.EAST);
		
		gesamt.add(header);
		gesamt.add(mitte);
		gesamt.add(unten);
				
	}
	

	
	public void actionPerformed(ActionEvent e){
		
		
	}
	
	
}
 
Zuletzt bearbeitet:

njans

Top Contributor
Hmm ist mir tatsächlich nicht aufgefallen, aber: Wo fügst du denn deine MyComponent überhaupt hinzu?
Ich sehe da nämlich keine MyComponent in deinem Frame.
 

T7V

Aktives Mitglied
:oops: War tatsächlich noch die Klasse vom ersten Zeichen-Versuch drin... Löst das Problem aber leider auch nicht...
 

njans

Top Contributor
Was soll denn nun MyComponent sein? Soll "mitte" MyComponent sein? Oder soll das irgendwo hinzugefügt werden? Stell doch bitte mal deinen jetzigen Code rein, indem auch die MyComponent hinzugefügt wird.
 

Harry Kane

Top Contributor
Du musst entweder getPreferredSize() überschreiben und eine geeignete Dimension zurückgeben (die z. B. von der Labyrinthgröße abhängt), oder du musst setPreferredSize(Dimension dim) mit einer geeigneten Größe aufrufen.
Wenn meine JComponents sich nicht zeichnen wollen liegt es in 99% aller Fälle an einer size von 0,0.
 

njans

Top Contributor
Ah da, nun sehe ich es. Wie mein Vorredner schon sagt, liegt das wohl daran, dass du bei BorderLayout.EAST eben nicht wirklich eien Skalierung erreichst. Da wird deine Componente wohl stark zusammengestaucht, so, dass du diese nicht siehst. setPreferredSize() verwenden, damit die breite auch passt. Ansonsten einen anderen layoutManager verwenden.

Nebenbei: revalidate() mal nach dem hinzufügen aufrufen. Das ist dann wichtig, wenn die Komponente vorher sichtbar wahr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Abgeleitete JComponent wird nicht gezeichnet AWT, Swing, JavaFX & SWT 10
M JComponent wird in JFrame nicht angezeigt AWT, Swing, JavaFX & SWT 4
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
Hatsi09 JComponent anklicken und "entklicken" AWT, Swing, JavaFX & SWT 7
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
S Swing Schwierigkeiten mit JComponent AWT, Swing, JavaFX & SWT 4
T Swing JComponent vergrößern AWT, Swing, JavaFX & SWT 4
L JComponent und MouseMotionListener AWT, Swing, JavaFX & SWT 2
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
W JComponent - ComponentListener - resized / moved AWT, Swing, JavaFX & SWT 5
Developer_X Wie heißt das JComponent hier? AWT, Swing, JavaFX & SWT 2
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
A JComponent Größe AWT, Swing, JavaFX & SWT 8
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
N 2D-Grafik RTF in eigener JComponent AWT, Swing, JavaFX & SWT 2
D Swing JComponent zeichnen ohne sie zur Oberfläche hinzuzufügen AWT, Swing, JavaFX & SWT 2
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
D JComponent erweitern AWT, Swing, JavaFX & SWT 4
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
M 2x JComponent in einem JFrame darstellen? AWT, Swing, JavaFX & SWT 7
StupidAttack Animation, JComponent AWT, Swing, JavaFX & SWT 3
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
H JComponent == JTextfield? AWT, Swing, JavaFX & SWT 4
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
G JComponent nachträglich in JPanel einfügen AWT, Swing, JavaFX & SWT 5
M Ganzen Frame mit JComponent ausfüllen AWT, Swing, JavaFX & SWT 9
M JMenu teilweise unter einer JComponent AWT, Swing, JavaFX & SWT 4
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
T JComponent nur in Swing verwendbar? AWT, Swing, JavaFX & SWT 6
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
Dragonfire Image von JComponent AWT, Swing, JavaFX & SWT 2
T x und y herrausfinden eines JComponent auf JFrame AWT, Swing, JavaFX & SWT 14
J absolute Position einer JComponent ermitteln AWT, Swing, JavaFX & SWT 4
B "weiches" Bewegen von einem JComponent AWT, Swing, JavaFX & SWT 18
ARadauer JPanel vs JComponent AWT, Swing, JavaFX & SWT 2
I JDialog aus JComponent erstellen AWT, Swing, JavaFX & SWT 2
S JComponent u. JPanel ausdrucken AWT, Swing, JavaFX & SWT 3
J SWT JComponent Problem AWT, Swing, JavaFX & SWT 4
T JComponent überzeichnen? AWT, Swing, JavaFX & SWT 2
G JComponent in JTable AWT, Swing, JavaFX & SWT 8
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
S JComponent in JPanel darstellen AWT, Swing, JavaFX & SWT 2
N JComponent#getClientProperty(key) welche Schlüssel gibt es? AWT, Swing, JavaFX & SWT 3
E Drucken von JComponent. AWT, Swing, JavaFX & SWT 4
S JComponent ersetzen AWT, Swing, JavaFX & SWT 13
R Resize Problem bei JComponent AWT, Swing, JavaFX & SWT 2
M JButton in JComponent abfragen AWT, Swing, JavaFX & SWT 6
S Mausbehandlungen für JComponent AWT, Swing, JavaFX & SWT 7
M Verschiebbare JComponent AWT, Swing, JavaFX & SWT 5
C zeichnen auf jComponent AWT, Swing, JavaFX & SWT 3
S in einem JComponent zu zeichnen AWT, Swing, JavaFX & SWT 4
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
R JComponent malt seine Kinder nicht AWT, Swing, JavaFX & SWT 8
G JComponent Hintergrund AWT, Swing, JavaFX & SWT 3
M JMenu auf JComponent? AWT, Swing, JavaFX & SWT 10
G Graphics (g) und JComponent prob. AWT, Swing, JavaFX & SWT 2
G Klasse XYComponent extends JComponent AWT, Swing, JavaFX & SWT 3
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben