怎样在一个指定大小的矩形内绘制字串?比如,在一个150*20的矩形内绘制“我是中国人”?字体大小与据矩形的高宽自动确定。

解决方案 »

  1.   

    java.awt.Graphics.drawString() java.awt.FontMetrics 算字符串长宽
      

  2.   

    象你这样的实现在java中应该比较复杂,光字体都有很多种,每种字体的长,宽都不一样,还有字符串的长,宽也不确定.在你指定大小的矩形内,如果符合长度,不一定符合宽度.所以比较难.给你个我以前写的可以设定字体及大小的简单程序.
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;class TxtFont extends JFrame implements ListSelectionListener{
    JLabel l=new JLabel("示例文本 Simple Text");
    JList j1=new JList();
    JList j2=new JList();

    JScrollPane jScrollPane1=new JScrollPane();
    JScrollPane jScrollPane2=new JScrollPane();

    JPanel p1=new JPanel();
    JPanel p2=new JPanel();

    TxtFont(){
    this.setLayout(new BorderLayout());
    this.add(p1,BorderLayout.NORTH);
    this.add(p2,BorderLayout.SOUTH);
    p1.add(l);

    jScrollPane1.getViewport().add(j1);
    p2.add(jScrollPane1);
    jScrollPane2.getViewport().add(j2);
    p2.add(jScrollPane2);

    GraphicsEnvironment env=GraphicsEnvironment.getLocalGraphicsEnvironment();
    String fontNames[]=env.getAvailableFontFamilyNames();
    j1.setListData(fontNames);

    String fontSizes[]={"9","10","11","12","14","16","18","20","24","26","28","30","32"};
    j2.setListData(fontSizes);

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("设置文本字体");
    this.setSize(350,300);
    this.setVisible(true);
    j1.addListSelectionListener(this);
    j2.addListSelectionListener(this);
    }

    public void valueChanged(ListSelectionEvent e){
    if(e.getSource().equals(j2))
    {
    int newFontSize=Integer.parseInt((String)j2.getSelectedValue());
    Font f=l.getFont();
    Font newFont=new Font(f.getName(),f.getStyle(),newFontSize);
    l.setFont(newFont);
    }
    else
    {
    String newFontName=(String)j1.getSelectedValue();
    Font f=l.getFont();
    Font newFont=new Font(newFontName,f.getStyle(),f.getSize());
    l.setFont(newFont);
    }
    }

    public static void main(String[] args){
    new TxtFont();
    }
    }