Scaling
Hi everyone,
I have been trying to do the scaling of a JTextPane but i seem to be geeting weird results and i don't know why and hope someone could really weigh on this
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.*;
publicclass 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;
publicvoid 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);
}
publicstaticvoid main(String args[])
{
JTextScalar a =new JTextScalar();
a.initialize();
}
}
class JScalableTextPaneextends 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);
}
*/
publicvoid 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

