Hi everyone,

I have a JTextPane with some styled text in it and i am trying to scale them.

What i mean is that assuming that the text inside the JTextPane on startup is a 100% in size. After i click some JButton all the font size of the entire document is reduced to 25%

The thing is that this JTextPane contains alot of text that has different font sizes thus i want each of their respective font sizes of the character to be 25% of its original value.

Does anyone know how to do this?

But is there another way i could achieve the scaling of my styled text in my JTextPane so that it is 25% of its original value by means of subclassing my JTextPane or StyledDocument class and overiding its paint method?

Does anyone know how to do this?

Any help is greatly appreciated

Thank You

Yours Sincerely

Richard West

Hi everyone,

I tried working on the scaling of the JTextPane but i seem to get weird results and don't know why

Here is a full compilable example where you can compile the code and see what i mean

import java.awt.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.text.*;

public class JTextScalar

{
	JFrame fr = new JFrame ("Frame"); 

	JScalableTextPane TextPane1 = new JScalableTextPane();

	StyleContext sc = new StyleContext();

	DefaultStyledDocument dse = new DefaultStyledDocument(sc);

	JScrollPane ScrollPane1 = new JScrollPane(TextPane1, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
	ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

	StyledEditorKit StyledEditorKit1 = new StyledEditorKit();                                        

	JViewport viewport;

	public void initialize()
	{ 
		Container pane = fr.getContentPane();
		pane.setLayout(new BorderLayout());
		fr.setSize(250,300);
		fr.setLocation(300,300);
		fr.setBackground(Color.lightGray);

		dse.putProperty("i18n", Boolean.TRUE);

		TextPane1.setEditorKit(StyledEditorKit1);

		//The below command line sets the document that the JTextPane will be 
		//be referencing to

		TextPane1.setDocument(dse);

		viewport = new JViewport();
		viewport.setView(TextPane1);
		viewport.setScrollMode(viewport.SIMPLE_SCROLL_MODE); 
		//viewport.setScrollMode(viewport.BACKINGSTORE_SCROLL_MODE);
		ScrollPane1.setViewport(viewport);

		pane.add("Center", ScrollPane1);
		//ScrollPane1.invalidate(); 
		ScrollPane1.revalidate(); 
		ScrollPane1.repaint(); 
		TextPane1.revalidate(); 
		TextPane1.repaint(); 

		fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fr.pack();
		fr.setVisible(true);
	}

	public static void main(String args[])
	{
		JTextScalar a = new JTextScalar(); 
		a.initialize();
	}
}

class JScalableTextPane extends JTextPane

{
	/*
public void paintComponent(Graphics g)
{
//This function overrides the JPanel paintComponent function
//and paints the buffered image on the JPEGPanel 
 
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                     RenderingHints.VALUE_FRACTIONALMETRICS_ON);

g2d.scale(0.5, 0.5);
//AffineTransform old = g2d.getTransform();
//g2d.setTransform(old);
//super.notify();
//super.revalidate();
//super.repaint();
super.paintComponent(g2d);
}
*/
	public void paint(Graphics g) 
	{
		Graphics2D g2d = (Graphics2D)g;
		g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
		RenderingHints.VALUE_FRACTIONALMETRICS_ON);

		g2d.scale(0.5,0.5);
		AffineTransform old = g2d.getTransform();
		g2d.setTransform(old);
		super.paint(g2d);
	}

	public Dimension getPreferredSize() 
	{
		Dimension d= super.getPreferredSize();
		d.setSize(d.width*0.5,d.height*0.5);   
		return d;
	} 

	public Dimension getMinimumSize () 
	{
		Dimension d= super.getMinimumSize ();
		d.setSize(d.width*0.5,d.height*0.5);   
		return d;
	}

	public Dimension getMaximumSize () 
	{
		Dimension d= super.getMaximumSize();
		d.setSize(d.width*0.5,d.height*0.5);   
		return d;
	}

	public Dimension getSize () 
	{
		Dimension d= super.getSize ();
		d.setSize(d.width*0.5,d.height*0.5);   
		return d;
	}

}

The thing is that the text is scaled corretly but ScrollPane screws up completely and the typing of the text is not accurate

Is the way i am scaling the JTextpane correct?

Any help is greatly appreciated

Thank You

Yours Sincerely

Richard West

This article has been dead for over six months. Start a new discussion instead.