【问题标题】:JComboBox customize vertical scrollbarJComboBox 自定义垂直滚动条
【发布时间】:2016-09-20 16:26:37
【问题描述】:

这个目的主要是为了美观,我已经在 J​​TextArea 上做过类似的事情,但我无法弄清楚或无法从 JComboBox 访问弹出窗口上的垂直滚动条。我通过将 witdh 设置为 0 删除了显示在顶部的箭头。

    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

这是 JScrollPane 内的 JTextArea,没有箭头和更细的条

    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

【问题讨论】:

    标签: java swing jcombobox custom-component vertical-scrolling


    【解决方案1】:

    你可以试试这个reference下面的代码

    private void updateScrollBar(JComboBox<E> box) {
        Object comp = box.getUI().getAccessibleChild(box, 0);
    
        if (comp instanceof JPopupMenu) {
            JPopupMenu popup = (JPopupMenu) comp;
            JScrollPane scrollPane = (JScrollPane) popup.getComponent(0);
            jScrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(35, 35));
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以覆盖BasicComboBoxUIgetPopup() 方法以创建新的BasicComboPopup。然后您可以访问createScroller() 方法,通过覆盖它,您可以返回您自己定制的JScrollPane


      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();
                  }
              });
          }
      
      }
      

      【讨论】:

      • 优秀的答案先生,正是我想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多