class CboRenderer extends JCheckBox implements ListCellRenderer{ public CboRenderer(){
super(); }
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// TODO Auto-generated method stub
this.setText(value+"");
return this;
}
}cbo.setRenderer(new CboRenderer());我现在完成到这一步,下一步打算重写JComboBox那个点击完item就关闭下拉菜单的那个事件,但是我没有找到,请哪位高手指教下。谢谢了。
super(); }
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
// TODO Auto-generated method stub
this.setText(value+"");
return this;
}
}cbo.setRenderer(new CboRenderer());我现在完成到这一步,下一步打算重写JComboBox那个点击完item就关闭下拉菜单的那个事件,但是我没有找到,请哪位高手指教下。谢谢了。
解决方案 »
- JInternalFrame 如何监听键盘事件
- tomcat6.0 连接JDBC问题
- 怎样判断JTree的一个结点是它的叶结点?
- 关于复选框的取值问题
- 请问一个对字符串操作的问题,立刻给分
- 利用 RandomAccessFile向一个文件中写入信息时,为什么出现乱码?
- swing用的多吗?交流一下学习java的经验!!
- 高分求救,牛人帮忙
- 窗口关闭状态为DO_NOTHING_ON_CLOSE 还是关闭了?
- 如何在AWT Panel中画200个小方块,并能定位每个方块的坐标???急
- TimerTask 定时器类问题...抛java.lang.NullPointerException异常
- C学的还可以,但还未深入学习C++,能学JAVA吗,如何快速起步?
import java.awt.event.*;
import java.awt.*;
import java.util.HashSet;
import java.util.Iterator;
public class JCheckBox_Renders_JComboBox extends JFrame {
JPanel buttonPanel;
private static final String BLANK = "";
private static final String DOG = "DOG";
private static final String CAT = "CAT";
private static final String PIG = "PIG";
private static final String RABBIT = "RABBIT";
private static final String OX = "OX";
private static final String [] animalOption =
{BLANK, DOG, CAT, PIG, RABBIT, OX};
CheckComboBox checkComboBox;
JButton button;
String excludeDest;
private HashSet instructionHashset=new HashSet();
private JButton get_button()
{
if(button == null)
{
button = new JButton("Print");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.out.println(getAnimals());
}});
}
return button;
}
public JCheckBox_Renders_JComboBox() {
buttonPanel = new JPanel();
checkComboBox = new CheckComboBox();
checkComboBox.setPreferredSize(new Dimension(120, 20));
for(int i = 0; i < animalOption.length; i ++)
{
checkComboBox.addItem(animalOption[i]);
}
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(checkComboBox, BorderLayout.CENTER);
buttonPanel.add(get_button(), BorderLayout.EAST);
getContentPane().add(buttonPanel,BorderLayout.NORTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true);
}
public static void main(String args[])
{
JCheckBox_Renders_JComboBox fe = new JCheckBox_Renders_JComboBox();
}
class CheckComboBox extends JComboBox {
CheckRenderer renderer;
public CheckComboBox () {
renderer = new CheckRenderer();
setRenderer(renderer);
addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
int sel = getSelectedIndex();
if (sel == 0) {
getUI().setPopupVisible(this, false);
}
else if (sel > 0 && sel < (animalOption.length)) {
renderer.cbl[sel].setSelected(renderer.cbl[sel].isSelected() ? false : true);
}
}
/**
* This method needs to be overriden so that the popuplist won't close
* when user selects one opion
*/
public void setPopupVisible(boolean flag)
{
//Not code her prevents the populist from closing
}
}
class CheckRenderer extends JCheckBox implements ListCellRenderer {
public JCheckBox[] cbl = new JCheckBox[animalOption.length];
public CheckRenderer() {
setOpaque(true);
for(int i = 0; i < animalOption.length; i ++)
{
cbl[i] = new JCheckBox();
}
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
if (index > -1) {
cbl[index].setText(value.toString());
cbl[index].setBackground(isSelected ? Color.green : Color.white);
cbl[index].setForeground(isSelected ? Color.white : Color.black);
if(cbl[index].isSelected())
{
getInstructionHashset().add(value);
}
else
{
getInstructionHashset().remove(value);
}
return cbl[index];
}
return cbl[0];
}
}
public String getAnimals()
{
Iterator it=instructionHashset.iterator();
int i=0;
String temp="";
while(it.hasNext())
{
temp=String.valueOf(it.next());
if(i==0)
excludeDest=temp;
else
excludeDest=excludeDest+" "+temp;
i=i+1;
}
return excludeDest;
}
public HashSet getInstructionHashset() {
return instructionHashset;
}
}
import javax.swing.*; import java.awt.event.*;
import java.awt.*;
import java.util.HashSet;
import java.util.Iterator; public class JCheckBox_Renders_JComboBox2 extends JFrame { JPanel buttonPanel; private static final String BLANK = "妖怪";
private static final String DOG = "狗";
private static final String CAT = "猫";
private static final String PIG = "猪";
private static final String RABBIT = "RABBIT";
private static final String OX = "OX"; private static final String [] animalOption =
{BLANK, DOG, CAT, PIG, RABBIT, OX}; CheckComboBox checkComboBox; JButton button; String excludeDest; private HashSet instructionHashset=new HashSet(); private JButton get_button()
{
if(button == null)
{
button = new JButton("Print");
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) {
System.out.println(checkComboBox.renderer.label.getText());
}});
}
return button;
} public JCheckBox_Renders_JComboBox2() {
buttonPanel = new JPanel(); checkComboBox = new CheckComboBox();
checkComboBox.setPreferredSize(new Dimension(120, 20)); for(int i = 0; i < animalOption.length; i ++)
{
checkComboBox.addItem(animalOption[i]);
}
buttonPanel.setLayout(new BorderLayout());
buttonPanel.add(checkComboBox, BorderLayout.CENTER);
buttonPanel.add(get_button(), BorderLayout.EAST); getContentPane().add(buttonPanel,BorderLayout.NORTH); setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true);
} public static void main(String args[])
{
JCheckBox_Renders_JComboBox2 fe = new JCheckBox_Renders_JComboBox2();
}
class CheckComboBox extends JComboBox {
boolean flag =true;
CheckRenderer renderer; public CheckComboBox () {
renderer = new CheckRenderer();
setRenderer(renderer);
addActionListener(this);
}
StringBuffer sb = new StringBuffer();
public void actionPerformed(ActionEvent e) {
int sel = getSelectedIndex();
if (flag) {
flag = false ;
getUI().setPopupVisible(this, false);
}
else{
renderer.cbl[sel].setSelected(!renderer.cbl[sel].isSelected());
this.updateUI();
getUI().setPopupVisible(this, true);
if(renderer.cbl[sel].isSelected()){
if(!("".equals(sb.toString()))){
sb.append("&");
}
sb.append(renderer.cbl[sel].getText());
}else{
int start = sb.lastIndexOf("&"+renderer.cbl[sel].getText());
if(start == -1){
start = sb.lastIndexOf(renderer.cbl[sel].getText());
}
int end = start + renderer.cbl[sel].getText().length()+1;
sb.delete(start, end);
}
if("".equals(sb.toString())){
renderer.label.setText("请选择");
}else{
renderer.label.setText(sb.toString());
}
}
}
/**
* This method needs to be overriden so that the popuplist won't close
* when user selects one opion
*/
public void setPopupVisible(boolean flag)
{
//Not code her prevents the populist from closing
}
}
class CheckRenderer extends JCheckBox implements ListCellRenderer {
public JCheckBox[] cbl = new JCheckBox[animalOption.length];
public CheckRenderer() {
setOpaque(true); for(int i = 0; i < animalOption.length; i ++)
{
cbl[i] = new JCheckBox();
} }
public final JLabel label = new JLabel("请选择");
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
// System.out.println("-------------------------------");
// if("".equals(value)){
// }else {
// label.setText(value+"");
// }
if (index > -1) {
cbl[index].setText(value.toString());
// cbl[index].setBackground(isSelected ? Color.green : Color.white);
// cbl[index].setForeground(isSelected ? Color.white : Color.black); /*if(cbl[index].isSelected())
{
getInstructionHashset().add(value);
}
else
{
getInstructionHashset().remove(value);
} */
return cbl[index];
}
System.out.println("---------------------"+index);
return label;
}
} public String getAnimals()
{
Iterator it=instructionHashset.iterator();
int i=0;
String temp="";
while(it.hasNext())
{
temp=String.valueOf(it.next());
if(i==0)
excludeDest=temp;
else
excludeDest=excludeDest+" "+temp;
i=i+1;
}
return excludeDest;
} public HashSet getInstructionHashset() {
return instructionHashset;
} }
这是我改进的代码。