Hi everyone,
I tried to do the scaling of the JtextPane and i seem to get weird results and i really don't know why this is so and maybe someone could weigh in
Here is a full compilable example where you can compile the code and see what i mean
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
Bookmarks