Scaling

F

freesoft_2000

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
 
T

Thomas Fritsch

freesoft_2000 said:
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?

I remember a similar question in group comp.lang.java.help.
Google for "html with jtextpane" on 4.July 2005.
 
R

Roedy Green

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.

I suppose you might do something with an AffineTransform and pass the
original paint method a modified Graphics object. I don't know if
fonts grow and shrink too.

See http://mindprod.com/jgloss/affinetransform.html
 
F

freesoft_2000

Hi everyone,

I think you guys have misunderstood my question in that i am
not talking about scaling for printing but something of a zoom in and zoom
out for the JTextPane

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

Code:
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
 
Z

zero

Hi everyone,

I think you guys have misunderstood my question in that i
am
not talking about scaling for printing but something of a zoom in and
zoom out for the JTextPane

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

<snipped>

this is very specific to Swing GUIs, so I think you may have better luck in
either comp.lang.java.gui, or sun's own swing forum at
http://forums.java.sun.com/forum.jspa?forumID=57
 
R

Roedy Green

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);
this code here should read:

Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
AffineTransform old = g2d.getTransform();
g2d.scale(0.5,0.5);
super.paint(g2d);
g2d.setTransform(old);
 
R

Roedy Green

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);
}

because you are using Swing, you should be overriding paintComponent,
not paint.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top