我在做一款读书软件,里面有增大和减小字体的功能。但是我发现了一个问题,导入小说的时候阅读正常。但是当我点击减小字体或增大字体按钮时,字体是减小或增大了,但是当我在点击其他按钮时或者最小化窗口,这时JTextArea的区域也变小了。这是怎么回事啊?怎么解决啊,有点摸不着头脑求帮忙正常界面
点击增大字体按钮后最小化窗口,当窗口回复时的界面
点击增大字体按钮后最小化窗口,当窗口回复时的界面
我用的是JTextArea里德 setFont()函数,我查了下帮助文档,对这个函数有这样的说明:“设置当前字体。这将移除缓存的行高和列宽,以便新的字体能够反映出来,并且调用 revalidate()。”我不知道是不是这个影响的? 该怎么调整呢?我不想用JTextPane或JEditorPane,因为要换的话程序代码我还要重新修改很多地方。
既然这个改变行高和列宽,你可以在修改字体后,修改会原来的宽和高啊!
下面是一个关于增大及减小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();
}
}
呵呵~ 不好意思哦,我现在说给你听:我先前的做法是把JTextPane加到JScrollPane上,然后再把JScrollPane加到JPanel上,最后再把JPanel加到窗体上。后来我把省去了把JScrollPane加到JPanel上这一步,直接把它加到窗体上,这样就可以了。呵呵~