Texteditor

Diskutiere Texteditor im Java Basics - Anfänger-Themen Bereich.
Bitte aktiviere JavaScript!
B

bene98

Hallo, Ich versuche gerade einen Text_Editor erstellen, den ich am leibesten auch für das Schreiben für e-mails verwenden würde.
Ich hab von dem Vorhaben auch eine Vorlage in einem Buch - ich will es aber lieber selbst umsetzen, um was zu lernen.
Meine Frage im Moment ist: Weshalb erhalte ich eine null Ponter Exception, wenn ich das Projekt ausführe und zum Beispiel die Schriftart wechsele.
Java:
package test;
import javax.swing.*;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.plaf.metal.OceanTheme;

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Textverarbeitung implements ItemListener {
JFrame tvframe;
JTextArea tvarea;
JPanel tvpanel;
JMenuBar tvbar;
JComboBox<String> fonts;
JComboBox<String> styles;
JComboBox<String> farben;
String farbe,fontname,style;

public Textverarbeitung() {}
public static void main (String []args) {
Textverarbeitung Textverarbeitung2 = new Textverarbeitung();   
Textverarbeitung2.run();
}
    
public void run() {   
JFrame tvframe= new JFrame();

try {
    // Set metl look and feel
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

    // Set theme to ocean
    MetalLookAndFeel.setCurrentTheme(new OceanTheme());
}
catch (Exception e) {
}

JTextArea tvarea = new JTextArea("Langeweile");
tvarea.setEditable(true);
tvarea.setPreferredSize(new Dimension(600,300));
tvarea.setLineWrap(true);
JScrollPane scroll= new JScrollPane();
scroll.getViewport().add(tvarea);

JMenuBar tvbar = new JMenuBar();
JMenu tvmenudatei = new JMenu("Datei");
JMenu tvmenubearbeiten = new JMenu("Bearbeiten");
JMenu tvmenusuchen = new JMenu("Suchen");
JMenu tvmenuversenden = new JMenu("Versenden");
tvbar.add(tvmenudatei);
tvbar.add(tvmenubearbeiten);
tvbar.add(tvmenusuchen);
tvbar.add(tvmenuversenden);

JMenuItem dateiladen =new JMenuItem("Datei laden");
tvmenudatei.add(dateiladen);
JMenuItem dateispeichern= new JMenuItem("Datei speichern");
tvmenudatei.add(dateispeichern);
JPanel tvpanel= new JPanel();


tvpanel.setLayout(new BorderLayout());
tvframe.setLayout(new BorderLayout());
tvframe.add(BorderLayout.NORTH,tvbar);
tvpanel.setSize(300, 200);
tvpanel.setVisible(true);



JComboBox<String> fonts = new JComboBox <String>();
fonts.addItem(Font.SERIF);
fonts.addItem(Font.SANS_SERIF);
fonts.addItem(Font.MONOSPACED);

JComboBox<String> styles = new JComboBox <String>();
styles.addItem("normal");
styles.addItem("kursiv");
styles.addItem("fett");


JComboBox <String> farben= new JComboBox<String>();
farben.addItem("Schwarz");
farben.addItem("Rot");
farben.addItem("Grün");
farben.addItem("Gelb");
farben.addItem("Blau");
farben.addItem("Cyan");
farben.addItem("Magenta");


JPanel auswahlboxen = new JPanel();
auswahlboxen.setLayout(new GridLayout(1,4));
auswahlboxen.add(fonts);
auswahlboxen.add(styles);
auswahlboxen.add(farben);
tvpanel.add(BorderLayout.NORTH, auswahlboxen);
tvpanel.add(BorderLayout.CENTER, scroll);


tvframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
tvframe.add(tvpanel);
tvframe.pack();
tvframe.setVisible(true);


fonts.setSelectedItem("SansSerif");
styles.setSelectedItem("normal");
farben.setSelectedIndex(0);

fonts.addItemListener((ItemListener) this);
styles.addItemListener((ItemListener) this);
farben.addItemListener((ItemListener) this);



}

public void fontAktualisieren() {
int fontstil;
String farbe,fontname,style;
int punktgröße;


    
    fontname = (String)fonts.getSelectedItem();
    style =  (String)styles.getSelectedItem();
    farbe= (String)farben.getSelectedItem();
    
    if(farbe.equals("Schwarz"))
        tvarea.setForeground(Color.black);
    if(farbe.equals("Rot"))
        tvarea.setForeground(Color.red);
    if(farbe.equals("Grün"))
        tvarea.setForeground(Color.green);
    if(farbe.equals("Gelb"))
        tvarea.setForeground(Color.yellow);
    if(farbe.equals("Blau"))
        tvarea.setForeground(Color.blue);
    if(farbe.equals("Cyan"))
        tvarea.setForeground(Color.cyan);
    if(farbe.equals("Magenta"))
        tvarea.setForeground(Color.magenta);

    fontstil=Font.PLAIN;
    if(style.equals("kursiv"))
    fontstil += Font.ITALIC;
    if(style.equals("fett"))
        fontstil+= Font.BOLD;
    
    tvarea.setFont(new Font (fontname, fontstil, 12));
}
@Override
public void itemStateChanged(ItemEvent e) {
    fontAktualisieren();

    
}
    
    
    
    
    
    


}
 
mihe7

mihe7

Evtl. weil Du in run() Deine Instanzvariablen hinter lokalen versteckst?
 
B

bene98

Könntest Du mir das evtl etwas näher erklären oder mir sagen unter welchem Stichwort ich das nachschlagen kann?
Danke
 
B

bene98

Ich habe nicht ganz verstanden, welche Variable das Problem verursacht. Oder geht es allgemein darum, dass z.B. der jframe oben als instanzvariable deklariert und in run() initialisiert wird?

Ich hab versucht, das Problem zu lösen, indem ich die Sachen in den Konstruktor gepackt habe. Allerdings bleibt das Problem der N
Java:
package test;
import javax.swing.*;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.plaf.metal.OceanTheme;

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Textverarbeitung implements ItemListener {
JFrame tvframe;
JTextArea tvarea;
JPanel tvpanel;
JMenuBar tvbar;
JComboBox<String> fonts;
JComboBox<String> styles;
JComboBox<String> farben;
String farbe,fontname,style;

public Textverarbeitung() {   
    JFrame tvframe= new JFrame();

    try {
        // Set metl look and feel
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

        // Set theme to ocean
        MetalLookAndFeel.setCurrentTheme(new OceanTheme());
    }
    catch (Exception e) {
    }

    JTextArea tvarea = new JTextArea("f");
    tvarea.setEditable(true);
    tvarea.setPreferredSize(new Dimension(600,300));
    tvarea.setLineWrap(true);
    JScrollPane scroll= new JScrollPane();
    scroll.getViewport().add(tvarea);

    JMenuBar tvbar = new JMenuBar();
    JMenu tvmenudatei = new JMenu("Datei");
    JMenu tvmenubearbeiten = new JMenu("Bearbeiten");
    JMenu tvmenusuchen = new JMenu("Suchen");
    JMenu tvmenuversenden = new JMenu("Versenden");
    tvbar.add(tvmenudatei);
    tvbar.add(tvmenubearbeiten);
    tvbar.add(tvmenusuchen);
    tvbar.add(tvmenuversenden);

    JMenuItem dateiladen =new JMenuItem("Datei laden");
    tvmenudatei.add(dateiladen);
    JMenuItem dateispeichern= new JMenuItem("Datei speichern");
    tvmenudatei.add(dateispeichern);
    JPanel tvpanel= new JPanel();


    tvpanel.setLayout(new BorderLayout());
    tvframe.setLayout(new BorderLayout());
    tvframe.add(BorderLayout.NORTH,tvbar);
    tvpanel.setSize(300, 200);
    tvpanel.setVisible(true);



    JComboBox<String> fonts = new JComboBox <String>();
    fonts.addItem(Font.SERIF);
    fonts.addItem(Font.SANS_SERIF);
    fonts.addItem(Font.MONOSPACED);

    JComboBox<String> styles = new JComboBox <String>();
    styles.addItem("normal");
    styles.addItem("kursiv");
    styles.addItem("fett");


    JComboBox <String> farben= new JComboBox<String>();
    farben.addItem("Schwarz");
    farben.addItem("Rot");
    farben.addItem("Grün");
    farben.addItem("Gelb");
    farben.addItem("Blau");
    farben.addItem("Cyan");
    farben.addItem("Magenta");


    JPanel auswahlboxen = new JPanel();
    auswahlboxen.setLayout(new GridLayout(1,4));
    auswahlboxen.add(fonts);
    auswahlboxen.add(styles);
    auswahlboxen.add(farben);
    tvpanel.add(BorderLayout.NORTH, auswahlboxen);
    tvpanel.add(BorderLayout.CENTER, scroll);


    tvframe.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    tvframe.add(tvpanel);
    tvframe.pack();
    tvframe.setVisible(true);


    
    fonts.addItemListener((ItemListener) this);
    styles.addItemListener((ItemListener) this);
    farben.addItemListener((ItemListener) this);



    }
public static void main (String []args) {
Textverarbeitung Textverarbeitung2 = new Textverarbeitung();   
}
    


public void fontAktualisieren() {
int fontstil;
String farbe,fontname,style;
int punktgröße;
    
    fontname = (String)fonts.getSelectedItem();
    style =  (String)styles.getSelectedItem();
    farbe= (String)farben.getSelectedItem();
    
    if(farbe.equals("Schwarz"))
        tvarea.setForeground(Color.black);
    if(farbe.equals("Rot"))
        tvarea.setForeground(Color.red);
    if(farbe.equals("Grün"))
        tvarea.setForeground(Color.green);
    if(farbe.equals("Gelb"))
        tvarea.setForeground(Color.yellow);
    if(farbe.equals("Blau"))
        tvarea.setForeground(Color.blue);
    if(farbe.equals("Cyan"))
        tvarea.setForeground(Color.cyan);
    if(farbe.equals("Magenta"))
        tvarea.setForeground(Color.magenta);

    fontstil=Font.PLAIN;
    if(style.equals("kursiv"))
    fontstil += Font.ITALIC;
    if(style.equals("fett"))
        fontstil+= Font.BOLD;
    
    tvarea.setFont(new Font (fontname, fontstil, 12));
}
@Override
public void itemStateChanged(ItemEvent e) {
    fontAktualisieren();

    
}
    
    
    
    
    
    


}
ull Pointer Exception bestehen.
 
F

fhoffmann

Code:
public class Textverarbeitung implements ItemListener {
    JFrame tvframe;
    // ...
    public Textverarbeitung() {
        JFrame tvframe= new JFrame(); // dies ist eine neue lokale Variable und nicht das Member der Klasse
Lass im Konstruktor das JFrame weg (analog bei den andernen Membern).
 
Thema: 

Texteditor

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben