개발 등/중급

List 의 makeVisible(int index) 와 select(int index), deselect(int index) 메서드

darkhorizon 2008. 9. 16. 16:42
728x90
반응형
import java.awt.*;
import java.awt.event.*;

class Test extends Frame{
    List li;
    TextField tf;
    Button b;
   
    Test(){
 
        li=new List();
        tf=new TextField();
        b=new Button("ADD");
        tf.requestFocus();
        tf.addFocusListener(
          new FocusAdapter(){
           public void focusGained(FocusEvent e){
            tf.requestFocus();
           }
          }
        );
        tf.addActionListener(new ActPer(this));
        b.addActionListener(new ActPer(this));
     
        add(li,"North");
        add(tf,"Center");
        add(b,"South");
        addWindowListener(
          new WindowAdapter(){
           public void windowClosing(WindowEvent e){
            System.exit(0);
           }
          }
        );
    }
    public static void main(String args[]){
        Test t=new Test();
        t.setBounds(200,200,200,150);
        t.setVisible(true);
    }
}

class ActPer implements ActionListener {
    Test t;

    ActPer(Test t) {
        this.t = t;
    }

    public void actionPerformed(ActionEvent e) {
        t.li.add(t.tf.getText());
        t.li.makeVisible(t.li.getItemCount()-1);    // 가장 최근에 입력된 아이템의 인덱스 번호
        t.tf.setText("");
        t.tf.requestFocus();      // Focus를 TextField로 이동
    }
}

리스트에 아이템을 추가하다보면 스크롤 바가 생성된다.
문제는 스크롤 바가 추가되는 아이템의 갯수와 함께 계속 올라간다는 것.
그럼 스크롤 바가 최근에 추가되는 아이템을 가리키도록 하려면 어떻게 해야 할까?

운영체제가 윈도우일때는 actionPerformed()의 t.li.makeVisible(t.li.getItemCount()-1); 대신
t.li.select(t.li.getItemCount()-1);
t.li.deselect(t.li.getItemCount()-1);
으로 해줘도 상관없다.
하지만 운영체제가 리눅스 일 때는 makeVisible 메서드만 먹힌다.


728x90