# Editor: Schriftgröße ändern



## Robel (20. Mai 2005)

ich habe einen editor geschrieben mit dem ich jetzt die möglichkeit geben will die schriftgröße ändern zu können.
ich kann das folgende programm kompilieren aber nicht ausführen.


```
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class ABS_Edit extends Frame implements ActionListener
{
	private Font zeichensatz;
	private String fonttyp;
	private int fontstyle, font_pt;
	private CheckboxMenuItem pt10, pt12, pt14, pt16;
	private UeberDialog ueberBox;
	private NeuDialog neuBox;
	private TextArea inputField;
	private String fileName;
	private String linesep = System.getProperty("line.separator");
	private FileDialog saveDialog,loadDialog;
	
	public static void main(String[] args)
	{
		ABS_Edit e_wnd = new ABS_Edit(args);
	}
	
	public ABS_Edit(String param[])
	{
		super();
		addWindowListener(new WindowClosingAdapter());
		setSize(600,600);
		setLocation(100,100);
		setTitle("ABS_Edit");
		setMenu();
		ueberBox = new UeberDialog(this, "Über", true);
		neuBox = new NeuDialog(this, "Neu", true);
		inputField = new TextArea();
		add(inputField);
		saveDialog = new FileDialog(this, "Speichern unter...", FileDialog.SAVE);
		loadDialog = new FileDialog(this, "Laden...", FileDialog.LOAD);
		getTextFont();
		setVisible(true);
		if(param.length != 0)
		{
			fileName = param[0];
			getTextFile(fileName);
		}
	}
	
	private void getTextFont()
	{
		zeichensatz = inputField.getFont();
		fonttyp = zeichensatz.getFontName();
		fontstyle = zeichensatz.getStyle();
		font_pt = zeichensatz.getSize();
		System.out.println(fonttyp + " " + fontstyle + " " + font_pt + "\n" );
	}
	
	public void getTextFile(String name)
	{
		String col = "";
		
		try
		{
			FileReader i_stream = new FileReader(name);
			BufferedReader input = new BufferedReader(i_stream);
			inputField.setText("");
			while((col = input.readLine()) != null)
				inputField.append(col + linesep);
			input.close();
		}
		catch(IOException e)
		{
			inputField.setText("Lesefehler; " +e);
		}
		this.setTitle("ABS_Edit " + name);
	}
	
	public void saveTextFile(String name)
	{
		String cont = new String();
		
		this.setTitle("ABS_Edit " + name);
		try
		{
			FileWriter o_stream = new FileWriter(name);
			BufferedWriter output = new BufferedWriter(o_stream);
			cont = inputField.getText();
			output.write(cont);
			output.close();
		}
		catch(IOException e)
		{
			System.out.println("Schreibfehler: " +e);
		}
	}
	
	private void setRadioState(int i)
	{
		pt10.setState(false);
		pt12.setState(false);
		pt14.setState(false);
		pt16.setState(false);
		switch(i)
		{
			case 10 : pt10.setState(true);
				  break;
			case 12 : pt12.setState(true);
				  break;
			case 14 : pt14.setState(true);
				  break;
			case 16 : pt16.setState(true);
				  break;
			default: ;
		}
	}
				
	private void setMenu()
	{
		
		MenuBar m_leiste = new MenuBar();
		Menu datei	 = new Menu("Datei");
		  MenuItem neu	 = new MenuItem("Neu");
		  neu.setShortcut(new MenuShortcut('N'));
		  neu.addActionListener(this);
		  datei.add(neu);
		  MenuItem laden = new MenuItem("Laden...");
		  laden.setShortcut(new MenuShortcut('L'));
		  laden.addActionListener(this);
		  datei.add(laden);
		  MenuItem speichern = new MenuItem("Speichern");
		  speichern.setShortcut(new MenuShortcut('S'));
		  speichern.addActionListener(this);
		  datei.add(speichern);
		  datei.addSeparator();
		  MenuItem speichernu = new MenuItem("Speichern unter...");
		  speichernu.addActionListener(this);
		  datei.add(speichernu);
		  datei.addSeparator();
		  MenuItem drucken = new MenuItem("Drucken...");
		  drucken.setShortcut(new MenuShortcut('D'));
		  drucken.addActionListener(this);
		  datei.add(drucken);
		  datei.addSeparator();
		  MenuItem beenden = new MenuItem("Beenden");
		  beenden.setShortcut(new MenuShortcut('Q'));
		  beenden.addActionListener(this);
		  datei.add(beenden);
		Menu bearbeiten   = new Menu("Bearbeiten");
		Menu ansicht	  = new Menu("Ansicht");
		  pt10 = new CheckboxMenuItem("klein");
		  ansicht.add(pt10);
		  pt10.addActionListener(this);
		  pt12 = new CheckboxMenuItem("normal");
		  ansicht.add(pt12);
		  pt12.addActionListener(this);
		  pt14 = new CheckboxMenuItem("gross");
		  ansicht.add(pt14);
		  pt14.addActionListener(this);
		  pt16 = new CheckboxMenuItem("sehr gross");
		  ansicht.add(pt16);
		  pt16.addActionListener(this);
		Menu hilfe	  = new Menu("Hilfe");
		  MenuItem ueber = new MenuItem("Über...");
		  ueber.addActionListener(this);
		  hilfe.add(ueber);
		m_leiste.add(datei);
		m_leiste.add(bearbeiten);
		m_leiste.add(ansicht);
		m_leiste.setHelpMenu(hilfe);
		setMenuBar(m_leiste);
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		if(evt.getSource() instanceof MenuItem)
		{
			String befehl = evt.getActionCommand();
			if(befehl.equals("Beenden"))
			{
				setVisible(false);
				dispose();
				System.exit(0);
			}
			
			if(befehl.equals("Speichern"))
			{
				saveTextFile(fileName);
			}
			
			if(befehl.equals("Speichern unter..."))
			{
				saveDialog.setVisible(true);
				fileName = saveDialog.getDirectory() + saveDialog.getFile();
				if(saveDialog.getFile() != null)
				{
					saveTextFile(fileName);
					this.requestFocus();
					inputField.requestFocus();
				}
			}
			
			if(befehl.equals("Laden..."))
			{
				loadDialog.setVisible(true);
				fileName = loadDialog.getDirectory() + loadDialog.getFile();
				if(loadDialog.getFile() != null)
				{
					getTextFile(fileName);
					this.requestFocus();
					inputField.requestFocus();
				}
			}
			
			if(befehl.equals("Über..."))
			{
				ueberBox.setVisible(true);
			}
			
			if(befehl.equals("Neu"))
			{
				String tmp = inputField.getText();
				// Eingabefeld leer, es gibt nichts zu retten!
				if(tmp.equals(""))
				{
					fileName = "noname";
					setTitle("ABS_Edit " + fileName);
				}
				// Eingabefeld enthält Text
				else
				{
					neuBox.setVisible(true);
					tmp = neuBox.getResult();
					if(tmp.equals("ABBRECHEN"))
					{}
					if(tmp.equals("NEIN!"))
					{
						inputField.setText("");
						fileName = "noname";
						setTitle("ABS_Edit " + fileName);
					}
					if(tmp.equals("JA!"))
					{
						saveTextFile(fileName);
						inputField.setText("");
						fileName = "noname";
						setTitle("ABS_Edit" + fileName);
					}
				}
			}
		}
		
		if(evt.getSource() instanceof CheckboxMenuItem)
		{
		String befehl = evt.getActionCommand();
		if(befehl.equals("klein"))
		{
		font_pt = 10;
		setRadioState(10);
		}
		if(befehl.equals("normal"))
		{
		font_pt = 12;
		setRadioState(12);
		}
		if(befehl.equals("gross"))
		{
		font_pt = 14;
		setRadioState(14);
		}
		if(befehl.equals("sehr gross"))
		{
		font_pt = 16;
		setRadioState(16);
		}
		zeichensatz = zeichensatz.deriveFont((float)font_pt);
		inputField.setFont(zeichensatz);
		}
	}
}
```

beim ausführen bekomme ich folgende fehlermeldung:



> Exception in thread "main" java.lang.NullPointerException
> at ABS_Edit.getTextFont(ABS_Edit.java:51)
> at ABS_Edit.<init>(ABS_Edit.java:37)
> at ABS_Edit.main(ABS_Edit.java:20)



vielen dank schon im voraus für eure hilfe
mfg Robel


----------



## Sky (20. Mai 2005)

Ich denke mal, dass die Variable 'zeichensatz' gleich null ist!


----------



## Robel (20. Mai 2005)

:bahnhof: sowas in der richtung hab ich schon gedacht aber ich weis nicht wie das ändern könnte geschweige denn herauszufinden wieso zeichensatz gleich null sein könnte.


----------



## Robel (20. Mai 2005)

ich find es einfach nicht bitte bitte brauch hilfe!!


----------



## Robel (23. Mai 2005)

Also Robel

vertausch mal die Methode getTextfont();
mit setVisible(true);

also verdrehen.

Dann bekommst du keine Fehlermeldung mehr wegen des Fonts, aber die schriftgröße ändert sich auch nicht.

Ich habe herausbekommen erst wenn die Komponente dargestellt wird hat, hat sie auch einen Font.

vielleicht weißt du noch was 

DANIEL


----------



## The_S (24. Mai 2005)

Robel hat gesagt.:
			
		

> Also Robel
> 
> vertausch mal die Methode getTextfont();
> mit setVisible(true);
> ...



Robel == Daniel == Schizophren  :?  :bahnhof:  :autsch:  ???:L


----------

