当前位置: 首页 > 面试题库 >

Java-JComboBox中的复选框

华宏逸
2023-03-14
问题内容

我想制作一个JComboBox,它具有用于项目而不是文本的复选框。此外,应该可以检查多个项目并从组件中检索选定的项目。我应该做一个自定义的ComboBoxUI,ComboBoxEditor,ListCellRenderer,ComboPopUp还是其他完全不同的东西?是否有一个现有的Java控件可以做到这一点?


问题答案:

这相当容易实现。在这里找到链接文本

/* * The following code is adapted from Java Forums - JCheckBox in JComboBox URL: http://forum.java.sun.com/thread.jspa?forumID=257&threadID=364705 Date of Access: July 28 2005 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*;

public class JComboCheckBox extends JComboBox {
  public JComboCheckBox() { addStuff(); }
  public JComboCheckBox(JCheckBox[] items) { super(items); addStuff(); }
  public JComboCheckBox(Vector items) { super(items); addStuff(); }
  public JComboCheckBox(ComboBoxModel aModel) { super(aModel); addStuff(); }
  private void addStuff() {
    setRenderer(new ComboBoxRenderer());
    addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) { itemSelected(); }
    });
  }
  private void itemSelected() {
    if (getSelectedItem() instanceof JCheckBox) {
      JCheckBox jcb = (JCheckBox)getSelectedItem();
      jcb.setSelected(!jcb.isSelected());
    }
  }
  class ComboBoxRenderer implements ListCellRenderer {
    private JLabel defaultLabel;
    public ComboBoxRenderer() { setOpaque(true); }
    public Component getListCellRendererComponent(JList list, Object value, int index,
                boolean isSelected, boolean cellHasFocus) {
      if (value instanceof Component) {
        Component c = (Component)value;
        if (isSelected) {
          c.setBackground(list.getSelectionBackground());
          c.setForeground(list.getSelectionForeground());
        } else {
          c.setBackground(list.getBackground());
          c.setForeground(list.getForeground());
        }
        return c;
      } else {
        if (defaultLabel==null) defaultLabel = new JLabel(value.toString());
        else defaultLabel.setText(value.toString());
        return defaultLabel;
      }
    }
  }
}


 类似资料:
  • 主要内容:1 Java JComboBox的介绍,2 Java JComboBox的声明,3 Java JComboBox的构造方法,4 Java JComboBox的方法,5 Java JComboBox的案例1,6 Java JComboBox的案例21 Java JComboBox的介绍 Choice类的对象用于显示选项的弹出菜单。用户选择的选项显示在菜单顶部。它继承了JComponent类。 2 Java JComboBox的声明 我们来看一下javax.swing.JComboBox类

  • 问题内容: 每当尝试从中进行选择时,我都试图触发一个事件。 我遇到的问题是没有明显的方法。 我尝试使用,但从未触发。 没有覆盖的模型,我没有想法。 如何通知有关 选择更改的通知? 编辑:我要道歉。事实证明,我使用的是行为不佳的子类,但由于你的回答是好的,因此我将保留该问题。 问题答案: 它应该响应,如下所示: 正确地指出了也可以。但是,你可能会得到 ,一个用于取消选择先前选择的项目,另一个用于选择

  • 问题内容: 我真的可以在Java中使用三态复选框。听起来很简单,但是我只看到过非常丑陋的实现 [注意:链接现在坏了]。 三个单选按钮占用的空间过多,就我而言,这可能会使用户感到困惑。基本上是用于搜索对话框的。我需要true,false或“无关”选项。人们使用其他技术吗? 问题答案: 我找到了一种通过简单地添加侦听器来制作三态复选框的方法: 然后在应用程序代码中,只有一行: 收到所有反馈后,我认为下

  • 我有一个JComboBox选择项目的问题,有人能帮我吗?我已经实现了一个图形用户界面窗口,其中有各种文本字段和一个JComboBox。当我点击按钮,代码必须创建一个对象与字符串的文本字段和字符串的ComboBox,但我有一个在...获取的代码是: 我也试过: 但是不要工作!我不知道我是否需要一个ActionListener,但我认为这不是必需的。

  • 就像渲染器和编辑器听起来一样简单,尽管有十几个这样的书签,我还是回到类似的问题上,我缺少了一些基本的东西。我想把任何旧的文本文件拖到一个2列的JTable中,让第一列显示文件名,第二列包含一个JComboBox,它的选项取决于拖动文件的内容。(在下面的代码中,我只是伪造了几个条目。) 这一切都正常工作,直到我从一个组合框中做出一个选择--该选择不显示--只是一个组合框,正确填充但没有做出选择。我知

  • 我试图在JTable的某个列中放置一个JComboBox。我有这个代码,它正在工作: 我的问题是,在选中该列中的一个单元格之前,它不会显示为JComboBox。加载JFrame时,整个表看起来都一样,好像所有单元格中只有文本。单击时,它会显示组合框的箭头和选项,但再次取消选择时,它看起来像一个常规单元格。 有办法绕过它吗?