import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;public class Test extends JFrame {
JEditorPane editor = new JEditorPane();
JScrollPane scrollPane = new JScrollPane(editor);
Vector<Integer> lineNumber = new Vector<Integer>();
JList lineNumberPane= new JList(lineNumber); public Test() {

//scrollPane.setRowHeaderView(lineNumberPane);//如果取消注释,那么显示的效果讲改变,
 //原本设置的选中会被取消掉.为什么?


editor.setText("12432412#$\tsdgsdfgdsfg\r\nadg34adgdafgsdfgsdg"); editor.setSelectionStart(1);
editor.setSelectionEnd(7);


this.add(scrollPane,BorderLayout.CENTER); 
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
} public static void main(String[] args) {
Test jtfct = new Test();
jtfct.setBounds(100, 100, 800,600);
jtfct.setVisible(true); }
}scrollPane.setRowHeaderView(lineNumberPane);这行如果取消掉注释效果将改变,原本设置的选中被见了,为什么?

解决方案 »

  1.   

    JScrollPane 也可以有一个列标题和一个行标题。这二者都是 JViewport 对象,可用 setRowHeaderView 和 setColumnHeaderView 指定。
      

  2.   


    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Rectangle;
    import java.util.Vector;import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JScrollPane;public class test123 extends JFrame {
        
        
        public test123() {
         this.setLayout(null);
         JEditorPane editor = new JEditorPane();
            
            Vector<Integer> lineNumber = new Vector<Integer>(); 
            lineNumber.add(1);
            lineNumber.add(2);
            lineNumber.add(3);
            lineNumber.add(4);
            
            JList lineNumberPane= new JList(lineNumber);
            JScrollPane scrollPane = new JScrollPane(lineNumberPane);
            scrollPane.setRowHeaderView(editor);
            editor.setText("12432412#$\tsdgsdfgdsfg\r\nadg34adgdafgsdfgsdg");
            editor.setSelectionStart(1);
            editor.setSelectionEnd(10);
             
            scrollPane.setBounds(new Rectangle(10,10,200,100));
            this.add(scrollPane); 
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }    public static void main(String[] args) {
         test123 jtfct = new test123();
            jtfct.setBounds(100, 100, 800,600);
            jtfct.setVisible(true);    }
    }是挺奇怪的   沒弄懂    我這樣就能顯示   但是反過來就不行了~~
      

  3.   

    加上lineNumberPane的时候, lineNumberPane首先获得了输入焦点,文本组件 JTextArea, JEditorPane在没有焦点的情况下显示高亮选中的文本
    可以加一句 lineNumberPane.setFocusable(false); 来禁止lineNumberPane获得焦点
    或者参考这个bug报告里的方法使文本组件在没有焦点的情况下也显示高亮文本
    http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=2ae4ce31560e0b2187864997dbd89?bug_id=4273908