JComboBox的下拉框向上

    最近学习SWING,改变JComboBox的的显示方式,这里是将JComboBox的下拉框向上显示,以下为详细代码:

  package  kissJava.JComboBox;

import  java.awt.Dimension;
import  javax.swing.JButton;
import  javax.swing.JComboBox;
import  javax.swing.JComponent;
import  javax.swing.JFrame;
import  javax.swing.plaf.ComboBoxUI;
import  javax.swing.plaf.ComponentUI;
import  javax.swing.plaf.basic.BasicArrowButton;
import  javax.swing.plaf.basic.BasicComboBoxUI;
import  javax.swing.plaf.basic.BasicComboPopup;
import  javax.swing.plaf.basic.ComboPopup;

public   class  PopupComboSample  extends  JFrame {
  String labels[] 
= "Chardonnay""Sauvignon""Riesling""Cabernet",
          
"Zinfandel""Merlot""Pinot Noir""Sauvignon Blanc",
          
"Syrah""Gewurztraminer" }
;
  JComboBox jcb 
= null;
 
public PopupComboSample(){
  
this.setTitle("下拉框向上");
   
this.setLayout(null);
    jcb 
= new JComboBox(labels);
    
//setUI.......
    jcb.setUI((ComboBoxUI) MyComboBoxUI.createUI(jcb));
    jcb.setBounds(
5015020020);
    
this.add(jcb, null);
    setSize(
300300);
    setVisible(
true);
 }

 
  
public static void main(String args[]) {
   
     
new PopupComboSample();
   
  }


  
static class MyComboBoxUI extends BasicComboBoxUI {
   
int newsBarTitleWidth = 0;  
   
    
public static ComponentUI createUI(JComponent c) {
      
return new MyComboBoxUI();
    }

    
//改变箭头的方向
    protected JButton createArrowButton() {
      JButton button 
= new BasicArrowButton(BasicArrowButton.NORTH);
      
return button;
    }

    
//改变comboBox的弹出方向
    protected ComboPopup createPopup() {
     BasicComboPopup popup 
= new BasicComboPopup(comboBox){
      
public void show() {
         
//大小按需要更改
          Dimension popupSize = new Dimension(200 - newsBarTitleWidth - 517 * 5);
          scroller.setMaximumSize(popupSize);
          scroller.setPreferredSize(popupSize);
          scroller.setMinimumSize(popupSize);
          show(comboBox, newsBarTitleWidth, 
-17 * 5);//getPopupHeightForRowCount(10));
    }

  }
;
  popup.getAccessibleContext().setAccessibleParent(comboBox);
  
return popup;
 }

  }

}


 

显示效果为:

不过看图的效果jcb的输入框没有线条显示,看来得再改改,学习中。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值