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

为JComboBox的Items中的值设置工具提示,作为JTable中的CellEditor

仰经武
2023-03-14
问题内容

我想为自定义组合框中的值设置工具提示值。基本上,我的组合框包含一个姓名缩写的列表-
当他们将鼠标悬停在上方时,我希望它显示该姓名的全名。我的组合框基本上是JTable的一个单元格/列,它具有自己的TableCellRenderer和DefaultCellEditor。该列表是一个JList(模型中的内部类)-iv尝试直接设置’setToolTipText’方法,但这似乎不起作用。

这是代码:

  • JTable中的代码:*
    public void setupUserCombo(Container container){
          TableColumn col = getColumnModel().getColumn(3);
          Set<ComboUser> values = new LinkedHashSet<ComboUser>();

          ComboUser comboUser = new ComboUser(new User("Test User"));
          values.add(comboUser);

          col.setCellEditor(new MyComboBoxEditor((ComboUser[])values.toArray(new ComboUser[0])));
          col.setCellRenderer(new MyComboBoxRenderer((ComboUser[])values.toArray(new ComboUser[0])));
          repaint();
    }

    public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
        private static final long serialVersionUID = 1L;

        public MyComboBoxRenderer(ComboUser[] items) {
            super(items);
            repaint();
        }

        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (value != null){
                System.out.println("Setting tooltip");
                ((ComboUser)value).setToolTipText("TESTING!!");
            }
            setSelectedItem(value);

            return this;
        }
    }

    public class MyComboBoxEditor extends DefaultCellEditor {
        private static final long serialVersionUID = 1L;

        public MyComboBoxEditor(ComboUser[] items) {
            super(new JComboBox(items));
        }
    }

模型中的子类:

    public class ComboUser extends JLabel{

        private User user;

        public ComboUser(User user){
            if (user != null){
                this.user = user;
            } else {
                this.user = new User("");
            }
        }

        @Override
        public String toString() {
            return user.getInitials();
        }

问题答案:

如果要在编辑组合框中显示工具提示,则必须在该组合框的自定义渲染器中进行操作。下面是一个简短的示例:

    // some data
    User[] users = new User[] { 
            new User("Clara Zetkin", "CZ"),
            new User("Rosa Luxemburg", "RL"),
            new User("Susan Sontag", "SS"),
    };
    // the renderer for use in the editor
    ListCellRenderer comboRenderer = new DefaultListCellRenderer() {

        @Override
        public Component getListCellRendererComponent(JList<?> list,
                Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            if (value instanceof User) {
                setToolTipText(((User) value).getName());
                value = ((User) value).getInitials();
            } else {
                setToolTipText(null);
            }
            return super.getListCellRendererComponent(list, value, index, isSelected,
                    cellHasFocus);
        }

    };
    JComboBox editingCombo = new JComboBox(users);
    editingCombo.setRenderer(comboRenderer);

    JTable table = new JTable(3, 2);
    // set up the editor for the first column
    table.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(editingCombo));
    // the renderer to use in the table
    TableCellRenderer renderer = new DefaultTableCellRenderer() {

        @Override
        protected void setValue(Object value) {
            if (value instanceof User) {
                setToolTipText(((User) value).getInitials());
                value = ((User) value).getName();
            } else {
                setToolTipText(null);
            }
            super.setValue(value);
        }

    };
    table.getColumnModel().getColumn(0).setCellRenderer(renderer);


 类似资料:
  • 我想为自定义组合框中的值设置一个工具提示值。基本上,我的组合框包含一个人的首字母列表——当他们悬停在上面时,我想让它显示这个人的全名。我的组合框基本上是一个JTable的单元格/列,它有自己的TableCellRenler和DefaultCellEditor。列表是一个JList(模型中的内部类)——我尝试过直接设置“setToolTipText”方法,但似乎不起作用。 下面是代码: *JTabl

  • 我有一个可过滤和可编辑的JComboBox。我想为JComboBox中的每一项设置一个工具提示——我想我应该使用JToolTip来做这件事。 我试着用了这个链接的答案:Java Swing:JComboBox项目上的Mouseover text?。 但是当JComboBox显示过滤的项目时,JToolTip索引的顺序会发生变化。在这种情况下,我不知道如何为每个JComboBox项目设置正确的JTo

  • 好吧,这很难解释,但我会尽力的。 我在JTable中有一个JTextField和一个JComboBox,它的getCellEditor方法被覆盖如下: 以下是行为差异(请注意,从现在开始,当我说JTextField或JComboBox时,我指的是JTable中包含任一组件的单元格): > 当我使用tab键或箭头键导航到JTextField,然后开始键入时,我键入的字符会自动输入单元格。然而,当我以

  • 现在,在第一行第三列(“OK”)中,您可以在JComboBox中选择表示一行的不同条目。因此一行有三个引用另一行的JComboBoxes。如果您在这样的JComboBox中单击,您会注意到它总是选择第一个条目,而不是您在单击之前看到的带有数字的条目。 也许现在你明白我想做什么了?

  • 我目前正在开发一个JComboBox组件,我希望在其中的组合框中有一个JTable用于下拉选择。我扩展了ListCellRenderer,并且在弹出窗口中有一个表。 我想用两种不同的方式来呈现。第一个作为所选行的绑定列的标签,当弹出窗口不可见时。第二种是在弹出窗口可见时用JScrollPane显示表。 不幸的是,当我这样做时,弹出窗口被缩小到列表的行高,这只为表的列留下了空间。 如果我只是使用滚动

  • 我有一个JComboBox,其中的项是查询的结果。组合框显示从查询中获取的所有类别名称,对吗?好的,它起作用了。现在我需要给每个项目一个值,即产品的ID。 这是我目前得到的信息: 正如您在代码中看到的,每个项目的“标签”都是它的名称。现在,如何设置每个项目的ID,以便我可以操作之后?