JComboBox 如何禁止下拉的某一项不可选? 如题,谢谢!分不够再加!急等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这割不知道能不能做到,从来没想过,但是可以这样,下面的方法供参考:方法1:提供多个Model每个Model中含有不同的选项,根据不同功能需求切换方法2:随时根据不同的功能需求更换Model中的选项我偏向于方法2 我要提供的是,下拉菜单中的项都一样,不能删除,根据条件动态的判断哪些不可选,也就是变成灰色的。就像某个Component被设置disable一样 动态的model不可行,因为根据条件动态的判断哪些不可选。但又不得不显示出来。我以往是做WEB的,web实现这个太容易了,难道Swing 就不行? 如何做?我覆盖了Model的setSelectItem()方法,可以达到无法选中,但只是结果不选中,那个动作还是能操作。 //不一定是重写SelectItem..//可以简单点的//例如//选择的item被用到了下面的函数void setName(){ String name = getSelectItem; if(!chk(name)) { ... } else System.out.print("illegal user");}//这样的话就不用重写ComboBoxboolean chk(String in){ for(int i=0;i<disableName.size;i++)//disableName是个动态生成的String[] 用来保存禁用的 { if(in.equals(disableName[i])) return true; } return false;} setName?? 这个是什么时候用?干啥用的?不太明白呵呵! ...那只是个例子就是说当你取得到选中的目标的返回值后 再去判断而不是在选择的时候判断每当你在使用返回值前都用chk()判断下就完了 我可能没说明白,我要在ComboBox选择的时候控制,而非选择完了然后弹出错误,这个处理不了。 这是我最不想用的方法,所以才过来问,不过看来是没办法了,谢谢!也许除了覆盖JComboBox别无他法了钻牛角尖了,不好意思!感谢楼上的各位朋友! 一个问题的解决方案有很多种看楼主怎么看待了我推荐隐藏灰色项如果一定要显示灰色项,可以重写ComboBoxUI中的弹出菜单PopuMenu但是很麻烦,你试试就知道了祝你好运 这个???okimport java.awt.*;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2008</p> * * <p>Company: </p> * * @HUQIU * @version 1.0 */public class TestFrame extends JFrame implements ActionListener { BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel1 = new JPanel(); String[] input={"a","b","c","d"}; JComboBox jComboBox1 = new JComboBox(input); String[] disableName={"a"};//disableName是个动态生成的String[] 用来保存禁用的 JLabel jLabel1 = new JLabel(); public TestFrame() { try { jbInit(); this.show(); } catch (Exception exception) { exception.printStackTrace(); } } private void jbInit() throws Exception { this.setSize(300,300); getContentPane().setLayout(borderLayout1); jPanel1.setPreferredSize(new Dimension(300, 300)); jLabel1.setText("jLabel1"); this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); jComboBox1.addActionListener(this); jPanel1.add(jComboBox1); jPanel1.add(jLabel1); } public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox)e.getSource(); String tmp = (String)cb.getSelectedItem(); if(!chk(tmp)) jLabel1.setText("Select "+tmp); else jLabel1.setText("cant select "+tmp); } public boolean chk(String in) { for(int i=0;i <disableName.length;i++)//disableName是个动态生成的String[] 用来保存禁用的 { if(in.equals(disableName[i])) return true; } return false; } public static void main(String[] args) { TestFrame testframe = new TestFrame(); }} 关于super关键字的一点疑问 如何让系统启动后自动执行文件 j2se小问题(在线等) 关于jfreechart及 集合不可思议的问题 前进、后退按钮代码? 能够指出我程序错误的给100分!其他的不给分! 如何判断Httpclient超时? 关于正则表达式 java中如果对象是函数参数 到底是传值还是引用??? 请问有谁知道IBM的编译器Jikes吗 一个jar包运行的奇怪问题 Java 中 “==” 两边判断的位置互换有何区别??
但是可以这样,下面的方法供参考:
方法1:提供多个Model
每个Model中含有不同的选项,根据不同功能需求切换
方法2:随时根据不同的功能需求更换Model中的选项
我偏向于方法2
//例如
//选择的item被用到了下面的函数
void setName()
{
String name = getSelectItem;
if(!chk(name))
{
...
}
else
System.out.print("illegal user");
}
//这样的话就不用重写ComboBox
boolean chk(String in)
{
for(int i=0;i<disableName.size;i++)//disableName是个动态生成的String[] 用来保存禁用的
{
if(in.equals(disableName[i]))
return true;
}
return false;
}
再去判断
而不是在选择的时候判断每当你在使用返回值前都用chk()判断下就完了
钻牛角尖了,不好意思!感谢楼上的各位朋友!
看楼主怎么看待了
我推荐隐藏灰色项
如果一定要显示灰色项,可以重写ComboBoxUI中的弹出菜单PopuMenu
但是很麻烦,你试试就知道了
祝你好运
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @HUQIU
* @version 1.0
*/
public class TestFrame
extends JFrame implements ActionListener {
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel(); String[] input={"a","b","c","d"};
JComboBox jComboBox1 = new JComboBox(input);
String[] disableName={"a"};//disableName是个动态生成的String[] 用来保存禁用的
JLabel jLabel1 = new JLabel(); public TestFrame() {
try {
jbInit();
this.show();
}
catch (Exception exception) {
exception.printStackTrace();
}
} private void jbInit() throws Exception {
this.setSize(300,300);
getContentPane().setLayout(borderLayout1);
jPanel1.setPreferredSize(new Dimension(300, 300));
jLabel1.setText("jLabel1");
this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jComboBox1.addActionListener(this);
jPanel1.add(jComboBox1);
jPanel1.add(jLabel1);
}
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String tmp = (String)cb.getSelectedItem();
if(!chk(tmp))
jLabel1.setText("Select "+tmp);
else
jLabel1.setText("cant select "+tmp); }
public boolean chk(String in)
{
for(int i=0;i <disableName.length;i++)//disableName是个动态生成的String[] 用来保存禁用的
{
if(in.equals(disableName[i]))
return true;
}
return false;
} public static void main(String[] args) {
TestFrame testframe = new TestFrame();
}
}