Font ändern in JEditorPane klappt nicht

Trigoor2

Mitglied
Hallo Leute,

habe ein Problem. Die Schriftart im JEditorPane ändert sich leider nicht.:eek:

Quellcode:
Code:
import javax.swing.Action;
import javax.swing.JButton;


public class frmRtf extends JPanel implements ActionListener{
	private JMenuItem mntmArial;
	private JEditorPane editorPane;
	private JMenuItem mntmVerdana;

	public static void main(String[] args) {
		JFrame frm = new JFrame();
		frm.getContentPane().add(new frmRtf());
		frm.setVisible(true);
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frm.setBounds(100, 100, 920, 593);
	}
	
	/**
	 * Create the panel.
	 */
	public frmRtf() {
		setLayout(new BorderLayout(0, 0));
		
		editorPane = new JEditorPane();
		add(editorPane);
		
		RTFEditorKit rtf = new RTFEditorKit();
		editorPane.setEditorKit(rtf);
		
		JMenuBar menuBar = new JMenuBar();
		add(menuBar, BorderLayout.NORTH);
		
		JMenu mnNewMenu = new JMenu("Schriftarten");
		menuBar.add(mnNewMenu);
		
		
		mntmArial = new JMenuItem("Arial");
		mntmArial.setFont(new Font("Arial", Font.PLAIN, 12));
		mnNewMenu.add(mntmArial);
		
		JMenuItem mntmCourier = new JMenuItem("Courier");
		mntmCourier.setFont(new Font("Courier New", Font.PLAIN, 12));
		mnNewMenu.add(mntmCourier);
		
		JMenuItem mntmTimesNewRoman = new JMenuItem("Times New Roman");
		mntmTimesNewRoman.setFont(new Font("Times New Roman", Font.PLAIN, 12));
		mnNewMenu.add(mntmTimesNewRoman);
		
		mntmVerdana = new JMenuItem("Verdana");
		mntmVerdana.addActionListener(this);
		mntmVerdana.setFont(new Font("Verdana", Font.PLAIN, 12));
		mnNewMenu.add(mntmVerdana);
	}
	
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == mntmVerdana) {
			do_mntmVerdana_actionPerformed(e);
			editorPane.setFont(new Font("Verdana", Font.PLAIN, 12));
		}
		if (e.getSource() == mntmArial) {
			do_mntmNewMenuItem_actionPerformed(e);
			editorPane.setFont(new Font("Arial", Font.PLAIN, 12));
		}
	}
	protected void do_mntmNewMenuItem_actionPerformed(ActionEvent e) {
	}
	protected void do_mntmVerdana_actionPerformed(ActionEvent e) {
	}
}

Wäre nett wenn ihr mir helfen könntet...;-)

Viele Grüße
Trigoor
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,
welcher Font ist denn Standardmäßig bei JEditorPane eingestellt? Mithilfe von deinem Code kannst du außerdem auch nur die Schriftart "Verdena" einstellen, da die anderen noch nicht zum ActionListener hinzugefügt hast.

Gruß

Fabio
 

genodeftest

Erfahrenes Mitglied
Außerdem sind die Methoden
Java:
protected void do_mntmNewMenuItem_actionPerformed(ActionEvent e) {
}
protected void do_mntmVerdana_actionPerformed(ActionEvent e) {
}
leer, du rufst die selsam benannte frmRtf() nicht auf.

PS: du musst die Methodennamen nicht beim Programmieren obfuscaten
 

Trigoor2

Mitglied
Hallo...,

erst einmal Danke für die Tipps!

@Fabio:
Ich glaube der Standard bei JEditorPane dürfte "Times New Roman" sein.
Im Moment habe ich nur ein Event hinter dem Menüeintrag "Verdana". Wollte es erst einmal ausprobieren.

@genodeftest:
Habe jetzt eine anonyme Klasse für den Event erstellt. Das Präfix frm bin ich von VB.NET gewöhnt.
Obfuscaten bedeutet ja, dass ich den Quellcode verschleiere. Wo verschleiere ich denn da was?

Code:
protected void do_mntmNewMenuItem_actionPerformed(ActionEvent e) {
}
protected void do_mntmVerdana_actionPerformed(ActionEvent e) {
}


Habe meinen Quellcode ein bisschen verändert. Er sieht jetzt so aus:

Code:
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.text.rtf.RTFEditorKit;


public class frmRtf extends JPanel {
	private JMenuItem mntmArial;
	private JEditorPane editorPane;
	private JMenuItem mntmVerdana;

	public static void main(String[] args) {
		JFrame frm = new JFrame();
		frm.getContentPane().add(new frmRtf());
		frm.setVisible(true);
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frm.setBounds(100, 100, 920, 593);	
	}
	
	/**
	 * Create the panel.
	 */
	public frmRtf() {
		setLayout(new BorderLayout(0, 0));
		
		editorPane = new JEditorPane();
		add(editorPane);
		
		RTFEditorKit rtf = new RTFEditorKit();
		editorPane.setEditorKit(rtf);
		
		JMenuBar menuBar = new JMenuBar();
		add(menuBar, BorderLayout.NORTH);
		
		JMenu mnNewMenu = new JMenu("Schriftarten");
		menuBar.add(mnNewMenu);
		
		mntmVerdana = new JMenuItem("Verdana");
		mntmVerdana.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				editorPane.setFont(new Font("Verdana", Font.PLAIN, 12));
				JDialog jd = new JDialog();
				jd.show();
			}
		});
		mntmVerdana.setFont(new Font("Verdana", Font.PLAIN, 12));
		mnNewMenu.add(mntmVerdana);
	}
}

Zur Übersichtlichkeit habe ich mal die die anderen Menüeinträge rausgenommen.

Viele Grüße
Trigoor
 
Zuletzt bearbeitet:

Fabio Hellmann

Erfahrenes Mitglied
Hi,
mit Obfuscaten meinte er, dass du deine Variablen und Methoden (aus unserer Sicht) komisch benennst. (z.B.: ...mntm...****)

Also ich habe im Internet mal ein Beispiel gefunden, wie man den Font eines JEditorPanes wohl noch ändern kann. Ich habe das nicht ausprobiert, daher kann ich nicht sagen, ob es wirklich funktioniert. Hier mal der Code:
Java:
        Font font = new Font("Arial", 12, Font.Bold);
        String bodyRule = "body { font-family: " + font.getFamily() + "; " +
                "font-size: " + font.getSize() + "pt; }";
        ((HTMLDocument)editorPane.getDocument()).getStyleSheet().addRule(bodyRule);
Und hier noch der Link, falls du selber mal auf die Seite schauen willst.

Gruß

Fabio
 

Trigoor2

Mitglied
Hallo Fabio,

Danke erst einmal dafür, dass Du für mich sogar google um Rat gefragt hast. :)
Will ja ein rtf-Dokument. Kein HTML.
Die Variable mntmNewMenuItem wird automtatisch vom WindowBuilder erzeugt.:D

Habe folgenden Code probiert:

Code:
Font font = new Font("Arial", 12, Font.BOLD);
String bodyRule = "body { font-family: " + font.getFamily() +
 "; " +"font-size: " + font.getSize() +
 "pt; }";
editorPane.setFont(font);

Aber leider klappt das auch nicht.:(
 

Fabio Hellmann

Erfahrenes Mitglied
Also soweit ich das jetzt beurteilen kann, ist es wahrscheinlich nicht möglich, mit "RTFEditorKit" den Font zu ändern. Das wird evtl. daran liegen, dass dieses EditorKit nicht von den Swingentwicklern entwickelt wurde.
Was willst du denn später für ein Dokument als Ausgabe haben, dann kann man den Inhalt des JEditorPanes evtl. in das jeweilige Ausgabeformat umwandeln.

Gruß

Fabio
 

Trigoor2

Mitglied
Hallo Fabio,

habe das Problem gelöst. Du hattest Recht. Mit RTFEditorKit klappt das nicht. Wozu gibt es die überhaupt? Und warum hat sie die Methode setFont, wenn es sowieso nicht klappt:rolleyes:

Habe aber jetzt eine Lösung gefunden! :)

So funktioniert es:
Code:
		JEditorPane editorPane = new JEditorPane();
		editorPane.setContentType( "rtf" );
		editorPane.setFont(new Font("Verdana", Font.PLAIN, 72));

Danke Fabio!;)

Gruß
Trigoor
 

Neue Beiträge