Swing; JLabel auf Knopfdruck sichtbar machen

Ich habe ein Fenster mit Textfeldern, Labeln und einem Knopf. Sobald der Knopf gedrückt wird sollen die eingegebenen Werte übernommen und verrechnet werden. Dabei soll außerdem das Ergebnis (JLabel) erscheinen. Um das JLabel erscheinen zu lassen habe ich versucht in der actionPerformed Klasse das Label mit “add” hinzuzufügen. An der Stelle hat mir Eclipse einen Fehler ausgespuckt. Ich weiß nicht wie ich das Problem lösen kann.
Das kleine Programm soll bei kubischen Gleichungen die Nullstellen ausrechnen. Den Code fürs Berechnen habe ich schon für die Console programmiert, kann ich auch gerne auf Anfrage posten.
In dem Code geht es erstmal speziell um das JLabel x1, dass bei Betätigung des Buttons erscheinen soll.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;


public class UnserFenster extends JFrame {
	

	float a,b,c,d,ee,f,l;
	double x10,x20;
	
	JLabel text;
	JLabel text2;
	JLabel text3;
	JLabel zergebnis;
	JLabel zwischenergebnis;
	JLabel x1;
	JLabel x2;
	JLabel x3;
	
	JButton button;
	JTextField eingabe;
	JTextField eingabe2;
	JTextField eingabe3;
	JTextField eingabe4;

	public UnserFenster() {
		
		setVisible(true);
		setSize(500, 400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setTitle("Rechner");
		setResizable(false);
		setLayout(null);

		text = new JLabel("x^3 +");
		text.setBounds(65, 30, 500, 60);
		Font schrift = text.getFont().deriveFont(Font.BOLD, 17);
		text.setFont(schrift);
		add(text);
		
		text2 = new JLabel("x^2 +");
		text2.setBounds(165, 30, 500, 60);
		text2.setFont(schrift);
		add(text2);
		
		text3 = new JLabel("x +");
		text3.setBounds(265, 30, 500, 60);
		text3.setFont(schrift);
		add(text3);
		
		zergebnis = new JLabel("Zwischenergebnis:");
		zergebnis.setBounds(40, 100, 200, 50);
		Font schriftz = text.getFont().deriveFont(Font.ITALIC, 20);
		zergebnis.setFont(schriftz);
		add(zergebnis);
		
		zwischenergebnis = new JLabel("xyz");
		zwischenergebnis.setBounds(220, 100, 200, 50);
		zwischenergebnis.setFont(schriftz);
		add(zwischenergebnis);
		
	
		x1 = new JLabel("X1 =");
		x1.setBounds(40, 170, 300, 70);
		Font schriftx = text.getFont().deriveFont(Font.BOLD + Font.ITALIC, 25);
		x1.setFont(schriftx);
		//add(x1);
		
		x2 = new JLabel("X2 =");
		x2.setBounds(40, 220, 300, 70);
		x2.setFont(schriftx);
		add(x2);
		
		x3 = new JLabel("X3 =");
		x3.setBounds(40, 270, 300, 70);
		x3.setFont(schriftx);
		add(x3);

		button = new JButton("berechnen");
		button.setBounds(377, 52, 105, 20);
		button.addActionListener(new UnserListener());
		button.setEnabled(false);
		add(button);

		eingabe = new JTextField();
		eingabe.setBounds(10, 50, 50, 25);
		eingabe.addCaretListener(new SchreibkopfListener());
		//eingabe.setText(String.valueOf(a));
		add(eingabe);
		
		eingabe2 = new JTextField();
		eingabe2.setBounds(110, 50, 50, 25);
		eingabe2.addCaretListener(new SchreibkopfListener());
		add(eingabe2);
		
		eingabe3 = new JTextField();
		eingabe3.setBounds(210, 50, 50, 25);
		eingabe3.addCaretListener(new SchreibkopfListener());
		add(eingabe3);
		
		eingabe4 = new JTextField();
		eingabe4.setBounds(310, 50, 50, 25);
		eingabe4.addCaretListener(new SchreibkopfListener());
		add(eingabe4);

		repaint();
	}

	private class UnserListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			/* Hier ist der Fehler! UnserFenster.add(x1); */
			
String h,i,j,k;
			
			h = eingabe.getText();
			i = eingabe2.getText();
			j = eingabe3.getText();
			k = eingabe4.getText();
			
			try{
				a = Float.parseFloat(h);
				b = Float.parseFloat(i);
				c = Float.parseFloat(j);
				d = Float.parseFloat(k);
				}
				catch(NumberFormatException y)
				{
				return;
				}

		}

	}
	
	private class SchreibkopfListener implements CaretListener{

		@Override
		public void caretUpdate(CaretEvent arg0) {
			String h = eingabe.getText();
			String i = eingabe2.getText();
			String j = eingabe3.getText();
			String k = eingabe4.getText();
			
			h = h.trim();
			i = i.trim();
			j = j.trim();
			k = k.trim();
			
			if(h.isEmpty() || i.isEmpty() || j.isEmpty() || k.isEmpty()){
				button.setEnabled(false);
			}else{
				button.setEnabled(true);
			}
			
		}
		
	}
	
}

Null Layout und absolute Positionierung unschön, aber nicht das Problem.
Warum fügst Du das JLabel nicht gleich mit allen anderen ein? Lässt es einfach leer oder machst es einfach unsichtbar?

statt [void]UnserFenster.add[/void] wohl eher this.add(…) - bleibt allerdings noch das Problem der Layout-Manipulation zur Laufzeit, welches zwar mit einem validate() am Container behoben werden kann, aber nicht unbedingt eine schöne Lösung ist.

Wenn ich x1 erst unsichtbar und dann sichtbar mache funktioniert es! danke!
Ich habe jetzt mal die Rechnung hinzugefügt.
Bei der Rechnung habe ich noch ein kleines Problem, weil ich beim Konsolencode mit einer Rechnung überprüfe, ob es natürlich Zahlen sind oder nicht, damit im Endergebnis nicht z.B. 5.0 steht. Ich weiß nicht, wie ich das Ergebnis “sauber” ausgeben kann. Vielleicht blickt da jemand ohne großen Aufwand schnell durch und kann mir da weiter helfen.

Der stand sieht momentan so aus:
falls jemand was testen will: 1; 5;-1;-5 eingeben (da kommt was richtiges raus)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;


public class UnserFenster extends JFrame {
	

	float a,b,c,d,ee,f,l;
	double x10,x20;
	
	JLabel text;
	JLabel text2;
	JLabel text3;
	JLabel zergebnis;
	JLabel zwischenergebnis;
	JLabel x1;
	JLabel x2;
	JLabel x3;
	
	JButton button;
	JTextField eingabe;
	JTextField eingabe2;
	JTextField eingabe3;
	JTextField eingabe4;

	public UnserFenster() {
		
		setVisible(true);
		setSize(500, 400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setTitle("Rechner");
		setResizable(false);
		setLayout(null);

		text = new JLabel("x^3 +");
		text.setBounds(65, 30, 500, 60);
		Font schrift = text.getFont().deriveFont(Font.BOLD, 17);
		text.setFont(schrift);
		add(text);
		
		text2 = new JLabel("x^2 +");
		text2.setBounds(165, 30, 500, 60);
		text2.setFont(schrift);
		add(text2);
		
		text3 = new JLabel("x +");
		text3.setBounds(265, 30, 500, 60);
		text3.setFont(schrift);
		add(text3);
		
		zergebnis = new JLabel("Zwischenergebnis:");
		zergebnis.setBounds(40, 100, 200, 50);
		Font schriftz = text.getFont().deriveFont(Font.ITALIC, 20);
		zergebnis.setFont(schriftz);
		add(zergebnis);
		zergebnis.setVisible(false);
		
		zwischenergebnis = new JLabel("xyz");
		zwischenergebnis.setBounds(220, 100, 200, 50);
		zwischenergebnis.setFont(schriftz);
		add(zwischenergebnis);
		zwischenergebnis.setVisible(false);
		
	
		//x1 = new JLabel("X1 =" + x10);
		x1 = new JLabel();
		
		x1.setBounds(40, 170, 300, 70);
		Font schriftx = text.getFont().deriveFont(Font.BOLD + Font.ITALIC, 25);
		x1.setFont(schriftx);
		add(x1);
		x1.setVisible(false);
		
		x2 = new JLabel("X2 =" + x20);
		x2.setBounds(40, 220, 300, 70);
		x2.setFont(schriftx);
		add(x2);
		x2.setVisible(false);
		
		x3 = new JLabel("X3 =" + ee);
		x3.setBounds(40, 270, 300, 70);
		x3.setFont(schriftx);
		add(x3);
		x3.setVisible(false);

		button = new JButton("berechnen");
		button.setBounds(377, 52, 105, 20);
		button.addActionListener(new UnserListener());
		button.setEnabled(false);
		add(button);

		eingabe = new JTextField();
		eingabe.setBounds(10, 50, 50, 25);
		eingabe.addCaretListener(new SchreibkopfListener());
		//eingabe.setText(String.valueOf(a));
		add(eingabe);
		
		eingabe2 = new JTextField();
		eingabe2.setBounds(110, 50, 50, 25);
		eingabe2.addCaretListener(new SchreibkopfListener());
		add(eingabe2);
		
		eingabe3 = new JTextField();
		eingabe3.setBounds(210, 50, 50, 25);
		eingabe3.addCaretListener(new SchreibkopfListener());
		add(eingabe3);
		
		eingabe4 = new JTextField();
		eingabe4.setBounds(310, 50, 50, 25);
		eingabe4.addCaretListener(new SchreibkopfListener());
		add(eingabe4);

		repaint();
	}

	private class UnserListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			
			
String h,i,j,k;
			
			h = eingabe.getText();
			i = eingabe2.getText();
			j = eingabe3.getText();
			k = eingabe4.getText();
			
			try{
				a = Float.parseFloat(h);
				b = Float.parseFloat(i);
				c = Float.parseFloat(j);
				d = Float.parseFloat(k);
				}
				catch(NumberFormatException y)
				{
				return;
				}
			
			// Rechnung:
			ee=-50;
			while(a*Math.pow(ee, 3)+b*ee*ee+c*ee+d!=0 && ee<50)
			{
				ee++;
			}
			
			if (ee<50 && ee>-50)
			{
				String minus = " - ";
				String plus = " + ";
							
				f = ee*a+b;
				l = ee*ee*a+b*ee+c;
				
				int test1 = (int) a;
				int test2 = (int) f;
				int test3 = (int) l;
				
				//Zwischenergebnis-Ausgabe
				
				
				
				if(a==1){
					System.out.println("Zwischenergebnis (nach Polynomdivision):");
					System.out.print("x^2");
				}
				else if(a-test1!=0){
					System.out.println("Zwischenergebnis (nach Polynomdivision):");
					if(a!=0){System.out.print(a + "x^2");}
				}else{
					System.out.println("Zwischenergebnis (nach Polynomdivision):");
					if(a!=0){System.out.print(test1 + "x^2");}
				}
				
				if(f==1){
					System.out.print(" + x");
				}
				else if(f-test2!=0){
					if(f>0){System.out.print(plus);}
					if(f<0){System.out.print(minus);}
					if(f!=0){System.out.print(Math.abs(f) + "x");}
				}else{
					if(f>0){System.out.print(plus);}
					if(f<0){System.out.print(minus);}
					if(f!=0){System.out.print(Math.abs(test2) + "x");}
				}
				
				if(l-test3!=0){
					if(l>0){System.out.print(plus);}
					if(l<0){System.out.print(minus);}
					if(l!=0){System.out.println(Math.abs(l));}
				}				
				
				if(l-test3==0){
					if(l>0){System.out.print(plus);}
					if(l<0){System.out.print(minus);}
					if(l!=0){System.out.println(Math.abs(test3));}
				}
				
				x10=(f+Math.sqrt(f*f-4*a*l))/2*a;
				x20=(f-Math.sqrt(f*f-4*a*l))/2*a;
				
				int x100 = (int) x10;
				int x200 = (int) x20;
				int e1 = (int) ee;
				
				System.out.println(" ");
				System.out.println("Endergebnis:");
				
				if(x10-x100!=0){
					System.out.println("x1 = " + x10);
				}else{
					System.out.println("x1 = " + x100);
				}
				
				if(x20-x200!=0){
					System.out.println("x2 = " + x20);
				}else{
					System.out.println("x2 = " + x200);
				}
				
				if(ee-e1!=0){
					System.out.println("x3 = " + ee);
				}else{
					System.out.println("x3 = " + e1);
				}
				
				
			}
			else
			{
				System.out.println("kein x konnte gefunden werden!");
				System.out.println("ein x muss: -50<x<50 und zu den Natürlichen Zahlen gehoeren");
			}
				
			x1.setText("X1 = " + x10);
			x2.setText("X2 = " + x20);
			x3.setText("X3 = " + ee);
			
			x1.setVisible(true);
			x2.setVisible(true);
			x3.setVisible(true);
			zergebnis.setVisible(true);
			zwischenergebnis.setVisible(true);
			
			
			
			

		}

	}
	
	private class SchreibkopfListener implements CaretListener{

		@Override
		public void caretUpdate(CaretEvent arg0) {
			String h = eingabe.getText();
			String i = eingabe2.getText();
			String j = eingabe3.getText();
			String k = eingabe4.getText();
			
			h = h.trim();
			i = i.trim();
			j = j.trim();
			k = k.trim();
			
			if(h.isEmpty() || i.isEmpty() || j.isEmpty() || k.isEmpty()){
				button.setEnabled(false);
			}else{
				button.setEnabled(true);
			}
			
		}
		
	}
	
}

du kannst mit setText(String) den Inhalt des Labels austauschen

setVisible(true); besser letzter Befehl im Konstruktor statt erster(!), repaint() am Ende dann weg

Ich habe es kurz vor deiner Antwort nochmal bearbeitet :smiley:

z.B.

public class Test2
{
    public static void main(String[] args)
        throws Exception
    {
        DecimalFormat d = new DecimalFormat("#.##");
        d.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.ENGLISH)); // oder auch nicht
        System.out.println(d.format(4));
        System.out.println(d.format(4.00));
        System.out.println(d.format(4.01));
        System.out.println(d.format(4.09));
        System.out.println(d.format(4.001));
        System.out.println(d.format(4.009));
        System.out.println(d.format(-4.009));
    }
}

Vielen Dank!