我copy了代码过来没问题,至于你说的最大化没有滚动条,应该是因为你的“aaa”太少了,打多几个就可以出了

解决方案 »

  1.   

    发贴人回复happyegg(放松放松) :不是的呀,我的意思是哪怕只有一个a,也能拖动滚动块,使字母a移动,我就是问这个问题怎么解决的呀
      

  2.   

    JScrollPane jsp=new JScrollPane(JComponent c,JScrollPane.H..,JScrollPane.V..);
    并且设置值就行了应该!
      

  3.   

    看看这个代码。你可以直接copy过去,然后运行一下看看,是不是你需要的效果
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.font.*;
    import java.awt.geom.*;
    import java.awt.image.*;public class ScrollText extends JComponent
    {
    private BufferedImage image;
    private Dimension imageSize;
    private volatile int currOffset;

    private Thread internalThread;
    private volatile boolean noStopRequested;

    public ScrollText(String text)
    {
    currOffset=0;
    buildImage(text);

    this.setMinimumSize(imageSize);
    this.setPreferredSize(imageSize);
    this.setMaximumSize(imageSize);
    this.setSize(imageSize);

    noStopRequested=true;
    Runnable r=new Runnable()
    {
    public void run()
    {
    try
    {
    runWork();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    };

    internalThread=new Thread(r,"ScrollText");
    internalThread.start();
    }

    private void buildImage(String text)
    {
    //请求绘制时,打开反锯齿,并运用高质量选项
    RenderingHints renderHints=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    renderHints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);

    //创建一幅临时图像,用于判断文件的大小
    BufferedImage scratchImage=new BufferedImage(1,1,BufferedImage.TYPE_INT_RGB);

    Graphics2D scratchG2=scratchImage.createGraphics();
    scratchG2.setRenderingHints(renderHints);

    Font font=new Font("Serif",Font.BOLD|Font.ITALIC,24);

    FontRenderContext frc=scratchG2.getFontRenderContext();
    TextLayout t1=new TextLayout(text,font,frc);
    Rectangle2D textBounds=t1.getBounds();
    int textWidth=(int)Math.ceil(textBounds.getWidth());
    int textHeight=(int)Math.ceil(textBounds.getHeight());
    int horizontalPad=10;
    int verticalPad=6;

    imageSize=new Dimension(textWidth+horizontalPad,textHeight+verticalPad);

    //创建适当大小的图像
    image=new BufferedImage(imageSize.width,imageSize.height,BufferedImage.TYPE_INT_RGB);

    Graphics2D g2=image.createGraphics();
    g2.setRenderingHints(renderHints);

    int baselineOffset=(verticalPad/2)-((int)textBounds.getY());

    g2.setColor(Color.white);
    g2.fillRect(0,0,imageSize.width,imageSize.height);

    g2.setColor(Color.blue);
    t1.draw(g2,0,baselineOffset);

    //立即释放资源,但保持动画显示图像
    scratchG2.dispose();
    scratchImage.flush();
    g2.dispose();
    }

    public void paint(Graphics g)
    {
    //不论当前大小,确保裁减边缘
    g.setClip(0,0,imageSize.width,imageSize.height);

    int localOffset=currOffset; //以防改变
    g.drawImage(image,-localOffset,0,this);
    g.drawImage(image,imageSize.width-localOffset,0,this);

    //绘制轮廓
    g.setColor(Color.black);
    g.drawRect(0,0,imageSize.width-1,imageSize.height-1);
    }

    private void runWork()
    {
    while(noStopRequested)
    {
    try
    {
    Thread.sleep(100); //每秒10帧

    //调整滚动位置
    currOffset=(currOffset+1)%imageSize.width;

    //通知事件线程调用paint()
    repaint();
    }
    catch(InterruptedException e)
    {
    Thread.currentThread().interrupt();
    }
    }
    }

    public void stopRequest()
    {
    noStopRequested=false;
    internalThread.interrupt();
    }

    public boolean isAlive()
    {
    return internalThread.isAlive();
    }

    public static void main(String args[])
        {
         ScrollText st=new ScrollText("Java can do animation!");
         JPanel p=new JPanel(new FlowLayout());
         p.add(st);
        
         JFrame f=new JFrame("ScrollText Demo");
         f.setContentPane(p);
         f.setSize(400,100);
         f.setVisible(true);
        }
      }
      

  4.   

    To  OnlyFor_love(有生之年,狭路相逢,终不能幸免.....) 
    我看了你的运行结果,可那不是我想要的,你的那个结果是自动产生运动的文字,我的问题是怎样才能拖动滚动条来使内容移动呀
      

  5.   

    To  OnlyFor_love(有生之年,狭路相逢,终不能幸免.....) 
    我看了你的运行结果,可那不是我想要的,你的那个结果是自动产生运动的文字,我的问题是怎样才能拖动滚动条来使内容移动呀
      

  6.   

    To  OnlyFor_love(有生之年,狭路相逢,终不能幸免.....) 
    我看了你的运行结果,可那不是我想要的,你的那个结果是自动产生运动的文字,我的问题是怎样才能拖动滚动条来使内容移动呀
      

  7.   

    妹妹你的那个程序没问题啊,正如happyegg所说是因为你的“aaa”太少了,打多几个就可以出了
      

  8.   

    我明白妹妹你的意思,你所需要的功能java没有提供。如果policy设成always,它也只是显示滚动条在那儿,上面有没有滚动块,要看这个JScrollPane的viewport里能不能放下你要显示的东西。
    如果你非要让它在即时只有一个“a”的时候也能滚动(这好像有点象Excel),那只有一个办法了:JScrollBar bar = scrollPane.getHorizontalScrollBar();
    BoundedRangeModel model = bar.getModel();
    model.addChangeListener(listener);自己实现一个ChangeListener,比较model.getValue()的返回值和最小、最大值,如果滑动块已经到了尽头,就增加那个label的size。至于增加多少,就看你自己的需要了,Excel就是一次加一行或一列。不知道行不行,试试吧。
      

  9.   

    顺便问一下,怎么样在JTextArea中的内容满了后,滚动条自动下移一行,以显示新的内容(就像聊天室那样)?
    新手请教,谢谢
      

  10.   

    Cigel:
    把JTextArea放在JScrollPane里,在JTextArea上调用scrollRectToVisible方法textArea.scrollRectToVisible(new Rectangle(0, textArea.getHeight(), 0, 0));