2016-05-23 104 views
1

這個目的主要是審美的,我已經做了類似於JTextArea的東西,但我無法弄清楚它或從JComboBox訪問垂直滾動條的彈出窗口。從來就通過與沒有箭頭設置it's witdh爲0JComboBox自定義垂直滾動條

setUI(new BasicComboBoxUI(){ 
     protected JButton createArrowButton(){ 
      return new JButton(){ 
       @Override public int getWidth() { 
        return 0; 
       } 
       @Override 
       public void setFocusable(boolean focusable) { 
        super.setFocusable(false); 
       } 
      }; 
     } 
    }); 

jcombobox image

這裏'山的JTextArea一個JScrollPane的內部移除,顯示在頂部的箭頭和較薄酒吧

getVerticalScrollBar().setPreferredSize(new Dimension(10, 0)); 
    getVerticalScrollBar().setUI(new BasicScrollBarUI(){ 
     @Override 
     protected JButton createDecreaseButton(int orientation) { 
      return createZeroButton(); 
     } 

     @Override  
     protected JButton createIncreaseButton(int orientation) { 
      return createZeroButton(); 
     } 

     private JButton createZeroButton() { 
      JButton jbutton = new JButton(); 
      jbutton.setPreferredSize(new Dimension(0, 0)); 
      jbutton.setMinimumSize(new Dimension(0, 0)); 
      jbutton.setMaximumSize(new Dimension(0, 0)); 
      return jbutton; 
     } 
    }); 

jtextarea example

回答

3

您可以覆蓋BasicComboBoxUIgetPopup()方法,以創建一個新的BasicComboPopup。然後您可以訪問createScroller()方法,通過覆蓋方法,您可以返回自己的自定義JScrollPane


enter image description here

import java.awt.Dimension; 
import java.awt.EventQueue; 

import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.plaf.basic.BasicComboBoxUI; 
import javax.swing.plaf.basic.BasicComboPopup; 
import javax.swing.plaf.basic.BasicScrollBarUI; 
import javax.swing.plaf.basic.ComboPopup; 

public class Example { 

    public Example() { 
     JComboBox<Integer> comboBox = new JComboBox<Integer>(); 
     for (int i = 1; i <= 10; i++) { 
      comboBox.addItem(i); 
     } 

     comboBox.setUI(new BasicComboBoxUI() { 
      @Override 
      protected ComboPopup createPopup() { 
       return new BasicComboPopup(comboBox) { 
        @Override 
        protected JScrollPane createScroller() { 
         JScrollPane scroller = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
           JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
         scroller.getVerticalScrollBar().setUI(new BasicScrollBarUI() { 
          @Override 
          protected JButton createDecreaseButton(int orientation) { 
           return createZeroButton(); 
          } 

          @Override 
          protected JButton createIncreaseButton(int orientation) { 
           return createZeroButton(); 
          } 

          @Override 
          public Dimension getPreferredSize(JComponent c) { 
           return new Dimension(10, super.getPreferredSize(c).height); 
          } 

          private JButton createZeroButton() { 
           return new JButton() { 
            @Override 
            public Dimension getMinimumSize() { 
             return new Dimension(new Dimension(0, 0)); 
            } 

            @Override 
            public Dimension getPreferredSize() { 
             return new Dimension(new Dimension(0, 0)); 
            } 

            @Override 
            public Dimension getMaximumSize() { 
             return new Dimension(new Dimension(0, 0)); 
            } 
           }; 
          } 
         }); 
         return scroller; 
        } 
       }; 
      } 
     }); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.add(comboBox); 

     JFrame frame = new JFrame("Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Example(); 
      } 
     }); 
    } 

} 
+0

出色答卷先生,正是我一直在尋找。 –