2016-05-23 12 views
1

Dieser Zweck ist vor allem ästhetisch, ich habe schon etwas ähnliches auf JTextArea getan, aber ich kann es nicht herausfinden oder Zugriff auf die vertikale Bildlaufleiste auf dem Popup von der JComboBox. Ive entfernt auf den Pfeil, der oben zeigt durch den extrem witdh auf 0.JComboBox anpassen vertikale Bildlaufleiste

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

Hier ein JTextArea innerhalb eines JScrollPane ohne Pfeile setzen und eine dünnere bar

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

Antwort

3

Sie konnten die getPopup() Methode des BasicComboBoxUI um außer Kraft setzen ein neues 0 zu erstellen. Dann haben Sie Zugriff auf die Methode createScroller(), in der Sie durch Überschreiben einfach Ihre eigene angepasste JScrollPane zurückgeben können.


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

Ausgezeichnete Antwort Sir, was nur ich suchte. –