[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.newcomer] Re: Getting scroll pane to display bottom of text (using Swing)

In article <djimkv$9c8$1@xxxxxxxxxxxxxxxx>, yaofahua@xxxxxxxxxxx (JACK 
YAO) wrote:

> *From:* JACK YAO <yaofahua@xxxxxxxxxxx>
> *Date:* Mon, 24 Oct 2005 21:12:59 +0800
> 
> Peter Toye wrote:
> > In article <dj86ss$pj6$1@xxxxxxxxxxxxxxxx>, yaofahua@xxxxxxxxxxx 
> > (JACK YAO) wrote:
> > 
> >> public class test extends JFrame implements ActionListener {
> >>      JTextArea ta = new JTextArea(10, 10);
> >>      int i = 0;
> >>      JPanel p = new JPanel();
> >>      JScrollPane sp = new JScrollPane(ta);
> >>      public test() {
> >>          p.add(sp);
> >>          JButton btn = new JButton("test");
> >>          btn.addActionListener(this);
> >>          p.add(btn, BorderLayout.NORTH);
> >>          this.add(p);
> >>          pack();
> >>          setVisible(true);
> >>      }
> >>      public void actionPerformed(ActionEvent e) {
> >>          new AddThread().start();
> >>      }
> >>      class AddThread extends Thread {
> >>          public void run() {
> >>              for (int i = 0; i < 100; i++) {
> >>                  ta.append("line :" + i + "\n");
> >>                  //JScrollBar sb = sp.getVerticalScrollBar();
> >>                  //sb.setValue(sb.getMaximum());
> >>                  try {
> >>                      Thread.sleep(100);
> >>                  } catch (InterruptedException e) {
> >>                      e.printStackTrace();
> >>                  }
> >>              }
> >>          }
> >>      }
> >>      public static void main(String[] args) {
> >>          new test();
> >>      }
> >> }
> > Jack,
> > 
> > I've tried your program now, but modified it to append more than one 
> > line. When you comment out the lines the slider bar stays at the top. 
> > When you don't, last appended line isn't visible.
> > 
> > I'm obviously going to have to experiment more with my program, and 
> > learn about threading.
> > 
> > On a wider point, this seems to be an issue which makes Swing 
> > difficult to use - why isn't the obvious behaviour of the slider bar 
> > on append made a default?
> > 
> > Peter
> Peter, did you solve your problem ?  I change the for loop to :
> //**************************************************************
> for(int i=0;i<100;i++) {
>      System.out.println(sb.getMaximum());//1
> 
>      ta.append("line :" + i + "\n");
>      sleep(500);
>      System.out.println(sb.getMaximum());//2
> 
>      ta.append("line :" + i + "\n");
>      sleep(500);
>      System.out.println(sb.getMaximum());//3
> 
>      ta.append("line :" + i + "\n");
>      sleep(500);
>      System.out.println(sb.getMaximum());//4
> }
> //***************************************************************
> To my surprise, 3 4 which are the last two append are the same value. I 
> think this test has no thread factor.
> -- 
> 
> JACK YAO, Beijing, China
> 
Jack,

This is what I used for my test with threading. I found that the slider 
doesn't go all the way down to the bottom after the multi-line append. I 
think that I may bring this up as a Java bug report, but as a newbie I 
wanted to be sure that it wasn't just me.

Peter

    class AddThread extends Thread {
        public void run() {
            for (int i = 0; i < 10; i++) {
            	ta.append("Start of append\n");
                ta.append("line :" + i + "\n");
                ta.append("End of append\n");
                JScrollBar sb = sp.getVerticalScrollBar();
                sb.setValue(sb.getMaximum());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }