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

什么是Swing等效于HTML

毋玺
2023-03-14
问题内容

我希望我的JComboBox将多个选项组合在一起,类似于HTML
optgroup

<select>  
 <optgroup label="A">  
  <option/>
  <option/>  
 </optgroup>
</select>

我在Swing中找不到任何解决方案。为Combobox操纵UI渲染器似乎不是一个好主意,因为它依赖于OS和L&F(并且它们是私有的,因此无法扩展)。


问题答案:

考虑以下实现作为如何应用自定义样式和创建不可选择项目的基本指南:

public class ExtendedComboBox extends JComboBox {

    public ExtendedComboBox() {
        setModel(new ExtendedComboBoxModel());
        setRenderer(new ExtendedListCellRenderer());
    }

    public void addDelimiter(String text) {
        this.addItem(new Delimiter(text));
    }

    private static class ExtendedComboBoxModel extends DefaultComboBoxModel {
        @Override
        public void setSelectedItem(Object anObject) {
            if (!(anObject instanceof Delimiter)) {
                super.setSelectedItem(anObject);
            } else {
                int index = getIndexOf(anObject);
                if (index < getSize()) {
                    setSelectedItem(getElementAt(index+1));
                }
            }
        }

    }

    private static class ExtendedListCellRenderer 
                    extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList list, Object value,
                        int index, boolean isSelected, boolean cellHasFocus) {
            if (!(value instanceof Delimiter)) {
                return super.getListCellRendererComponent(list, value, index,
                        isSelected, cellHasFocus);
            } else {
                JLabel label = new JLabel(value.toString());
                Font f = label.getFont();
                label.setFont(f.deriveFont(f.getStyle() 
                           | Font.BOLD | Font.ITALIC));
                return label;
            }
        }
    }

    private static class Delimiter {
        private String text;

        private Delimiter(String text) {
            this.text = text;
        }

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


 类似资料:
  • 问题内容: 我已经用谷歌搜索,但无法找出什么是等效的。 这是我唯一能找到的(Swift的替代方法responsesToSelector:),但在我的情况下并没有太大意义,因为它检查了委托的存在,我没有委托,我只想检查是否存在新的API在设备上运行时是否返回,如果不是,则返回原先的api版本。 问题答案: 如前所述,在 大多数情况下,您可以使用可选的unwrapper运算符来实现所需的功能。这样,当

  • 问题内容: 我正在尝试使用elasticsearch-dsl实现倍数索引方法。基本上有两个步骤: 1.创建别名: 2.必要时更改别名: 我只能使用elasticsearch-py(而不是dsl)实现步骤1 : 我不知道在第二步该怎么做。那么,elasticsearch-dsl(或至少在elasticsearch-py中)的等效值是什么? 问题答案: 要实现,您需要使用:

  • 主要内容:1 Java Swing是什么,2 AWT与Swing的区别,3 JFC是什么,4 Swing的体系结构1 Java Swing是什么 Java Swing是Java基础类(JFC)的一部分,用于创建基于窗口的应用程序。它建立在AWT(抽象窗口工具包)API的顶部,并且完全用Java编写。 与AWT不同,Java Swing提供了平台无关的轻量级组件。 javax.swing包提供了Java swing API的类,例如JButton,JTextField,JTextArea,JRad

  • 问题内容: LINQ的Java等效项是什么? 问题答案: 现在使用Java 8向我们介绍了Stream API,这在处理集合时是类似的事情,但与Linq不太一样。 如果它是您正在寻找的ORM,例如Entity Framework,那么您可以尝试Hibernate

  • 问题内容: 在Oracle中,我们可以使用语句将其编写为生成单行。 什么是Teradata等效产品? 问题答案: 通常,不需要这样的表 在大多数情况下,Teradata数据库中实际上不需要任何表。以下是有效的SQL(就像在H2,PostgreSQL,Redshift,SQL Server,SQLite,Sybase ASE,Sybase SQL Anywhere,Vertica中一样) 例外情况

  • 问题内容: Java 在JavaScript中相当于什么? 问题答案: 简单的答案是没有这样的功能。 您拥有的最接近的东西是: 请注意,您 尤其 不想等待(例如在旋转循环中),因为您的浏览器几乎可以肯定会在单线程环境中执行JavaScript。