2014-04-15 7 views
0

jlist에 몇 개의 행만있는 경우 스크롤 막대를 아래로 스크롤 할 필요가 없기 때문에 스크롤 막대를 원하지 않습니다. 또한 비어있는 행을 강조 표시하는 빈 행을 클릭 할 수 있습니다. 행을 강조 표시하는 기능을 비활성화하려면 어떻게합니까?JScrollPane 내의 JList가 전체 영역을 채우지 않을 때 JScrollBar를 비활성화하는 방법은 무엇입니까?

public ProductApplication() 
    { 
    //WEST PANEL 
    JPanel west = new JPanel(new BorderLayout()); 
    west.setBorder(BorderFactory.createMatteBorder(
      5, 5, 5, 5, Color.blue)); 
    west.add(new JTextField("Products"), 
      BorderLayout.NORTH); 
    pList = new JList(product); 
    pList.setFixedCellHeight(20); 
    pList.setFixedCellWidth(100); 
    west.add(pList, BorderLayout.CENTER); 
    scrollpane = new JScrollPane(pList); 
    west.add(scrollpane, BorderLayout.WEST); 
    add(west, BorderLayout.WEST); 

답변

0

1) 바로 옆에 같은 JScrollPane을 만들 JScrollBar을 표시하지 않도록해야하는 경우

JScrollPane jScrollPane = new JScrollPane(list); 
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 

2) 당신은 ListCellRenderer의 도움으로 하이라이트 기능을 관리 할 수 ​​있습니다.

import java.awt.Component; 

import javax.swing.DefaultListCellRenderer; 
import javax.swing.DefaultListModel; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JScrollPane; 
import javax.swing.ListCellRenderer; 
import javax.swing.SwingUtilities; 

public class TestFrame extends JFrame { 

    public TestFrame(){ 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       init(); 
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       pack(); 
       setVisible(true); 
      } 
     }); 
    } 

    private void init() { 
     DefaultListModel<String> model; 
     JList<String> l = new JList<>(model = new DefaultListModel<>()); 
     l.setFixedCellHeight(20); 
     l.setFixedCellWidth(100); 
     model.addElement(""); 
     for(int i=0;i<5;i++){ 
      model.addElement(i+""); 
     } 
     model.addElement(""); 
     model.addElement("5"); 
     l.setCellRenderer(getRenderer()); 
     JScrollPane jScrollPane = new JScrollPane(l); 
     jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     add(jScrollPane); 

    } 

    private ListCellRenderer<? super String> getRenderer() { 
     return new DefaultListCellRenderer(){ 
      @Override 
      public Component getListCellRendererComponent(JList<?> list,Object value, int index, boolean isSelected,boolean cellHasFocus) { 
       Component listCellRendererComponent = super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus); 
       if((value == null || value.toString().isEmpty()) && isSelected){ 
        listCellRendererComponent.setBackground(list.getBackground()); 
        ((JComponent)listCellRendererComponent).setBorder(null); 
       } 

       return listCellRendererComponent; 
      } 
     }; 
    } 

    public static void main(String... s){ 
     new TestFrame(); 
    } 

} 
:

다음 예를보십시오