JTextField Kursiv und Fett machen

fth7

Mitglied
Hallo liebe Community!
Da ich das Programmieren erst seit neuestem lerne, steh ich des öfterem auf dem Schlauch.
Ein Problem was sich nun ergeben hat und ich nicht weiterkomme:
Ich möchte, dass der Nutzer Bsp ein Text eingeben kann und diesen mit Hilfe von Checkboxen Kursiv und Fett machen kann. Einzeln geht alles klar, jedoch wäre meine Frage wie mache ich das, dass wenn beide Checkboxen angeklickt sind das der Text Fett UND Kursiv ist?

Unten habe ich es im Programm ganz unten probiert, doch auch wenn beide angeklickt sind, wird es nicht gleichzeitig fett und kursiv sondern nur eins davon.

Java:
package FensterPackage;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

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

public class UnserFrame extends JFrame {
           
    JLabel text;
    JButton button;
    JTextField eingabe;
    JCheckBox fett;
    JCheckBox kursiv;
    JCheckBox groß;
    JPanel panel;
   
    public UnserFrame() {
        setVisible(true);
        setSize(500, 300); //Breite, Höhe
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        setLocationRelativeTo(null);// Fenster in Mitte
        setTitle("Erstes Fenster");
        setResizable(false);//das man größe nicht ändern kann
        setLayout(null);
       
        text = new JLabel("Hallo Welt!");
        text.setBounds(50, 100, 250, 60);
        Font schrift = (text.getFont().deriveFont(Font.PLAIN, 40)); //mit standart Font
        text.setFont(schrift);
        text.setToolTipText("Das ist der Text!");
        add(text);
       
        button = new JButton("Klick mich");
        button.setBounds(100, 10, 100, 50);
        button.addActionListener(new UnserListener());
        button.setEnabled(false);
        button.setToolTipText("Trage den Text ein");
        add(button);
       
        eingabe = new JTextField();
        eingabe.setBounds(300, 25, 100, 25);
        eingabe.addCaretListener(new SchreibkopfListener());
        eingabe.setToolTipText("Hier kommt dein Text rein");
        add(eingabe);
       
        panel = new JPanel();
        panel.setBounds(10, 180, 150, 150);
        panel.setLayout(null);
        add(panel);
       
        fett = new JCheckBox("Fett");
        fett.setBounds(0, 0, 150, 25);
        fett.addItemListener(new FettListener());
        fett.addItemListener(new FettKursiv());
        fett.setToolTipText("Macht den Text Fett!");
        panel.add(fett);
       
        kursiv = new JCheckBox("Kursiv");
        kursiv.setBounds(0, 25, 150, 25);
        kursiv.addItemListener(new KursivListener());
        kursiv.addItemListener(new FettKursiv());
        panel.add(kursiv);
       
       
       
       
    }
   
    private class UnserListener implements ActionListener {
       
   
        @Override
        public void actionPerformed(ActionEvent arg0) {
           
            text.setText(eingabe.getText());

        }
    }
    private class SchreibkopfListener implements CaretListener{

        @Override
        public void caretUpdate(CaretEvent arg0) {
            String s = eingabe.getText();
            s = s.trim();
            if(s.isEmpty()) {
                button.setEnabled(false);
            }else {
                button.setEnabled(true);
            }
        }
       
    }
   
    private class FettListener implements ItemListener{

        @Override
        public void itemStateChanged(ItemEvent arg0) {
            if(fett.isSelected()) {
                Font schrift = (text.getFont().deriveFont(Font.BOLD, 40));
                text.setFont(schrift);
            }
            else {
                Font schrift = (text.getFont().deriveFont(Font.PLAIN, 40));
                text.setFont(schrift);
            }
        }
    }
    private class KursivListener implements ItemListener{

        @Override
        public void itemStateChanged(ItemEvent arg0) {
            if(kursiv.isSelected()) {
                Font schrift = (text.getFont().deriveFont(Font.ITALIC, 40));
                text.setFont(schrift);
            }else {
                Font schrift = (text.getFont().deriveFont(Font.PLAIN, 40));
                text.setFont(schrift);
            }
        }
       
    }
    private class FettKursiv implements ItemListener{

        @Override
        public void itemStateChanged(ItemEvent arg0) {
        if(fett.isSelected() == true) {
        if(kursiv.isSelected() == true) {
            Font schrift = (text.getFont().deriveFont(Font.ITALIC + Font.BOLD, 40));
            text.setFont(schrift);
        }
        }else {
            Font schrift = (text.getFont().deriveFont(Font.PLAIN, 40));
            text.setFont(schrift);
        }
        }
       
    }

   
   
}
 
Hat leider nicht geklappt 🙁
Hat eventuell noch jemand andere Lösungsmöglichkeiten? Kann auch ein komplett anderer Code sein, hauptsache ich verstehe es wie es geht 🙂
 
Es ist nicht sichergestellt, dass die Listener in der Reihenfolge benachrichtigt werden, in der du sie hinzugefügt hast. Dann kann es sein, dass der KusivListener das rückgängig macht was der FettKursivListener gesetzt hat. Versuch mal ob es geht wenn du den FettListener und KursivListener nicht zu den Checkboxen hinzufügst.

Ich würde sowieso nur einen Listener dafür nehmen der dann alle 4 Fälle prüft (normal, fett, kursiv, fett + kursiv).
 
Es ist nicht sichergestellt, dass die Listener in der Reihenfolge benachrichtigt werden, in der du sie hinzugefügt hast. Dann kann es sein, dass der KusivListener das rückgängig macht was der FettKursivListener gesetzt hat. Versuch mal ob es geht wenn du den FettListener und KursivListener nicht zu den Checkboxen hinzufügst.

Ich würde sowieso nur einen Listener dafür nehmen der dann alle 4 Fälle prüft (normal, fett, kursiv, fett + kursiv).
Vielen Dank sehe gerade, dass es wirklich an den einzelnen Listenern liegt...
Erleichterung ist nun endlich da 🙂
 

Neue Themen


Zurück
Oben