我在做一款读书软件,里面有增大和减小字体的功能。但是我发现了一个问题,导入小说的时候阅读正常。但是当我点击减小字体或增大字体按钮时,字体是减小或增大了,但是当我在点击其他按钮时或者最小化窗口,这时JTextArea的区域也变小了。这是怎么回事啊?怎么解决啊,有点摸不着头脑求帮忙正常界面
点击增大字体按钮后最小化窗口,当窗口回复时的界面

解决方案 »

  1.   

    程序中可以改变字体的大小的,就是改变之后,显示字体的区域(JtextArea)却变小了....
    我用的是JTextArea里德 setFont()函数,我查了下帮助文档,对这个函数有这样的说明:“设置当前字体。这将移除缓存的行高和列宽,以便新的字体能够反映出来,并且调用 revalidate()。”我不知道是不是这个影响的? 该怎么调整呢?我不想用JTextPane或JEditorPane,因为要换的话程序代码我还要重新修改很多地方。
      

  2.   

    “设置当前字体。这将移除缓存的行高和列宽,以便新的字体能够反映出来,并且调用 revalidate()。”
    既然这个改变行高和列宽,你可以在修改字体后,修改会原来的宽和高啊!
      

  3.   

    这应该是和你对JTextArea的大小设置及所用的布局管理器有关系,并不能说是JTextArea的bug,只是你没掌握合适的用法.你应该将代码贴出来.
    下面是一个关于增大及减小JTextArea字体的程序,最小化再还原,JTextArea区域是不会变化的.package _7_Text;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import javax.swing.table.*;
    import java.util.*;
    /**
     * 2011-6-6 19:57:28
     * @author Administrator
     */
    public class TJTextArea {
        JFrame frame;
        Container contentPane;
        JButton addButton,subButton;
        JTextArea textArea;
        public TJTextArea(){
            frame=new JFrame("TextArea测试");
            contentPane=frame.getContentPane();
            textArea=new JTextArea("什么情况",10, 40);
            textArea.setLineWrap(true);
            contentPane.add(new JScrollPane(textArea),BorderLayout.CENTER);
            addButton=new JButton("增大");
            addButton.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    Font font=textArea.getFont();
                    int size=font.getSize();
                    size++;
                    font=new Font(font.getName(),font.getStyle(),size);
                    textArea.setFont(font);
                }
            });
            subButton=new JButton("减小");
            subButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Font font=textArea.getFont();
                    int size=font.getSize();
                    if(size>1){
                        size--;
                    }
                    font=new Font(font.getName(),font.getStyle(),size);
                    textArea.setFont(font);
                }
            });
            Box box=Box.createHorizontalBox();
            box.add(Box.createHorizontalGlue());
            box.add(addButton);
            box.add(Box.createHorizontalStrut(10));
            box.add(subButton);
            box.add(Box.createHorizontalGlue());
            contentPane.add(box,BorderLayout.SOUTH);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
        public static void main(String args[]){
            new TJTextArea();
        }
    }
      

  4.   


    呵呵~ 不好意思哦,我现在说给你听:我先前的做法是把JTextPane加到JScrollPane上,然后再把JScrollPane加到JPanel上,最后再把JPanel加到窗体上。后来我把省去了把JScrollPane加到JPanel上这一步,直接把它加到窗体上,这样就可以了。呵呵~