Swing Aktuelle Größe eines Textes in einem Label darstellen

tinche_st

Mitglied
Hallo Liebe Java Experten,
ich habe ein Problem an dem ich schon eine weile arbeite. Ich muss die Größe des Textes, die über die beiden Schaltflächen verändert werden kann, erweitern, so dass die aktuelle Textgröße zusätzlich in einem Label angezeigt wird. Ich habe versucht die Textgröße Variable (int schriftGroesse) in String umzuwandeln und sie im neuen JLabel darzustellen. Dies ist mir leider nicht gelungen. Hier ist mein code. Ich bitte um Hilfe!

[JAVA=42]package textTauscher2;


import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;


public class TextSpielereiGUI extends JFrame{

//die ID wurde automatisch mit Eclipse ergänzt
private static final long serialVersionUID = 9101793356610287754L;

//ein Label und zwei Schaltflächen als Instanzvariablen
private JLabel ausgabe, ausgabe2;
private JButton schaltflaecheGroesser, schaltflaecheKleiner;
//für die aktuelle Schriftgröße
private int schriftGroesse;

//eine innere Klasse für den WindowListener und den ActionListener
//die Klasse ist von WindowAdapter abgeleitet und
//implementiert die Schnittstelle ActionListener
class MeinKompakterListener extends WindowAdapter implements ActionListener{
//für das Öffnen des Fensters
@Override
public void windowOpened(WindowEvent e) {
//für die Eingabe
String eingabe;
eingabe = JOptionPane.showInputDialog("Geben Sie einen Text ein");
//den Text in das Label setzen
ausgabe.setText(eingabe);

//das Fenster neu "packen"
pack();
}

//für die Schaltflächen
@Override
public void actionPerformed(ActionEvent e) {
//wurde auf Größer geklickt
if (e.getActionCommand().equals("<")){
//die Schriftgröße um 1 erhöhen
schriftGroesse++;
System.out.println(schriftGroesse);
pack();}
//wurde auf Kleiner geklickt
if (e.getActionCommand().equals(">")){
//die Schriftgröße um 1 verringern
schriftGroesse--;
System.out.println(schriftGroesse);
pack();}
//und neu setzen
ausgabe.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
//das Fenster neu "packen"
pack();

}

}

//der Konstruktor
//er erzeugt die Komponenten und setzt die Fenstereinstellungen
public TextSpielereiGUI(String titel) {
//den Konstruktor der Basisklasse aufrufen und den Fenstertitel übergeben
super(titel);
//die beiden Schaltflächen
schaltflaecheGroesser = new JButton("<");
schaltflaecheKleiner = new JButton(">");
//ein leeres Label
ausgabe = new JLabel();
ausgabe.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));

//die Größe für die Schrift setzen
schriftGroesse = 10;

//die Schriftart im Label setzen

//ein Layout anwenden
setLayout(new GridLayout(0,2));
add(schaltflaecheGroesser);
add(schaltflaecheKleiner);
add(ausgabe);

//den Listener verbinden

MeinKompakterListener listener = new MeinKompakterListener();
addWindowListener(listener);
schaltflaecheGroesser.addActionListener(listener);
schaltflaecheKleiner.addActionListener(listener);


Integer.toString(schriftGroesse);
JLabel schriftGroesse;
schriftGroesse = new JLabel();
schriftGroesse.setFont(new Font("Arial",Font.PLAIN, 10));
add(schriftGroesse);

//das Fenster packen
pack();
//die Standardaktion beim Schließen festlegen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//das Fenster anzeigen
setVisible(true);
}
}
package textTauscher2;

public class TextSpielereiProgramm {
public static void main(String[] args) {
new TextSpielereiGUI("Eine Spielerei mit Text");
}

}

[/code]
 
Nur überflogen, das
JLabel schriftGroesse;
das da steht sollte wohl als
private JLabel schriftGroesseLabel;
oben stehen, und dann könnte man im ActionListener in der actionPerformed sowas machen wie
schriftGroesseLabel.setText(String.valueOf(schriftGroesse));
 
ich hab dein Problem wohl nicht richtig verstanden. Meintest Du so etwas?

PS: Bitte achte auf deine Kommentare, diese sollten nicht das Offensichtliche was der Code schon aussagt, beschreiben. Ich bin der Meinung das "<" die Grösse vermindern sollte, daher habe ich das getauscht.

Java:
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class TextSpielereiGUI extends JFrame {

	private final JLabel ausgabe;
	private final JButton schaltflaecheGroesser, schaltflaecheKleiner;
	private int schriftGroesse;
	private final JLabel schriftSize;

	class MeinKompakterListener extends WindowAdapter implements ActionListener {
		@Override
		public void windowOpened(WindowEvent e) {
			String eingabe = "";
			eingabe = JOptionPane.showInputDialog("Geben Sie einen Text ein");
			ausgabe.setText(eingabe);
			schriftSize.setText("" + schriftGroesse);
			pack();
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand().equals("<")) {
				schriftGroesse--;
				schriftSize.setText("" + schriftGroesse);
				System.out.println(schriftGroesse);
				pack();
			}
			if (e.getActionCommand().equals(">")) {
				schriftGroesse++;
				schriftSize.setText("" + schriftGroesse);
				System.out.println(schriftGroesse);
				pack();
			}
			ausgabe.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
			pack();

		}

	}

	public TextSpielereiGUI(String titel) {
		super(titel);
		schaltflaecheGroesser = new JButton("<");
		schaltflaecheKleiner = new JButton(">");
		ausgabe = new JLabel();
		schriftGroesse = 20;
		ausgabe.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
		getContentPane().setLayout(new GridLayout(0, 3));
		getContentPane().add(schaltflaecheGroesser);
		getContentPane().add(schaltflaecheKleiner);

		schriftSize = new JLabel("Schriftgrösse");
		getContentPane().add(schriftSize);
		getContentPane().add(ausgabe);

		MeinKompakterListener listener = new MeinKompakterListener();
		addWindowListener(listener);
		schaltflaecheGroesser.addActionListener(listener);
		schaltflaecheKleiner.addActionListener(listener);
		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	public static void main(String[] args) {
		new TextSpielereiGUI("Eine Spielerei mit Text");
	}
}
 
Vielen Dank!
ihr habt mir sehr sehr geholfen und jetzt macht es was es machen soll!
Ich habe getContentPane(). nicht gekannt, aber jetzt macht alles einen Sinn.:idea:
Nur habe ich noch eine Frage an turtule:
Wieso hast du die Variablen JLabel und JButton als final vereinbart, macht das einen Unterschied?
Vielen vielen Dank!!!
 

Zurück
Oben