Wieso erscheinen die Objekte manchmal und manchmal nicht

acine123

Mitglied
Java:
package simon.felix.pack;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Run {
	
	Dimension resolution = new Dimension(700,600);
	JFrame window;
	JTextField firstfield;
	JTextField secondfield;
	JPanel pane;
	JLabel plus;
	JLabel minus;
	
	public void run(){
		createwindow();
		createpanel();
		createthings();
	}
	
	private void createwindow(){
		window = new JFrame();
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			window.setSize(resolution);
			window.setLayout(null);
			window.setTitle("Tashenrechner");
			window.setVisible(true);
	}
	private void createpanel(){
		pane = new JPanel();
			pane.setBounds(0, 0, resolution.width, resolution.height);
			pane.setBackground(Color.green);
			pane.setLayout(null);
			pane.setVisible(true);
			window.add(pane);
	}
	private void createthings(){
		firstfield = new JTextField();
			firstfield.setBounds(20, 30, 100, 20);
			firstfield.setVisible(true);
			pane.add(firstfield);
			
		secondfield = new JTextField();
			secondfield.setBounds(140, 30, 100, 20);
			secondfield.setVisible(true);
			pane.add(secondfield);
			
			plus = new JLabel();
				plus.setBounds(125, 30, 20, 20);
				plus.setText("+");
				plus.setVisible(true);
				pane.add(plus);
				
			minus = new JLabel();
				minus.setBounds(245, 30, 20, 20);
				minus.setText("-");
				minus.setVisible(true);
				pane.add(minus);
	}
}

Beim ersten mal wenn ich das Programm starte werden alle Komponenten angezeigt, sobald ich das Fenster aber schließe und es wieder aufmache wird entweder nichts oder nur ein einziges Textfeld angezeigt. Weiss jemand warum. Habe diese Klasse natürlich über meine Klasse mit der main Methode aufgerufen.
 
Erstens es funktioniert nicht so wie du willst, weil du null-Layouts verwendest.
[WR]Null-Layouts sind böse![/WR]

Du hast jetzt zwei Möglichkeiten:

1. Du lässt den SwingWorker das für dich Zeichnen, der dir das regelmäßig updated.

Java:
//JAVA 8
SwingUtilities.invokeLater(()->new Run().run());
//JAVA 7
SwingUtilities.invokeLater(new Runnable() {
	@Override
	public void run() {
		new Run().run();
	}
});

2. Du muss händisch repaints einfügen:

Java:
public void run() {
	createwindow();
	createpanel();
	createthings();
	window.repaint();
}

Oder letzte und beste Variante ist:

Du verwendest LayoutManager!
 
Zuletzt bearbeitet:

Zurück
Oben