java - JComboBox 在设置自定义 UI 后丢失键盘事件

标签 java swing user-interface jcombobox

我有以下问题:

我需要为 JComboBoxComponent 设置自定义 UI(以修改颜色、箭头按钮等)。目前,我正在构造函数中执行此操作,如下所示:

public MyComboBox() {
   setUI(new MyComboBoxUI);
}

问题是,在以这种方式设置 UI 之后,我以某种方式丢失了组合框弹出列表中的所有 InputMapActionMap 内容,即它不会向上滚动列表或使用箭头键向下。

我在这里做错了什么?

代码如下:

public class CurrencyPairComboBox extends JComboBox { 

    public CurrencyPairComboBox() {
        setUI(new CurrencyPairComboBoxUI());
    }
}

class CurrencyPairComboBoxUI extends BasicComboBoxUI {

    @Override
    public void installUI(JComponent c) {
       super.installUI(c);

       listBox.setSelectionBackground(Color.BLACK);
       listBox.setSelectionForeground(Color.WHITE);
    }

    @Override
    protected JButton createArrowButton() {
       arrowButton = new JButton();
       arrowButton.setIcon(OrderWidgetUIConstants.DROPDOWN_ARROW_ICON);
       arrowButton.setRolloverIcon(OrderWidgetUIConstants.DROPDOWN_ARROW_HOVER_ICON);
       return arrowButton;
    }    
}

最佳答案

我试过你在这里发布的代码,我没有看到任何键盘问题,一切都按我的预期工作

enter image description here enter image description here

import java.awt.*;
import javax.swing.*;

class ComboBoxTest extends JFrame {

    private static final long serialVersionUID = 1L;
    private JComboBox comboBox;
    private ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon");
    private ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon");

    ComboBoxTest() {
        String[] items = {"Item1", "Item2"};
        comboBox = new JComboBox(items);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(comboBox);
        comboBox.setUI(new MyUI());
    }

    public JFrame getCurrentInstance() {
        return this;
    }

    public static void main(String[] args) {
        ComboBoxTest frame = new ComboBoxTest();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.pack();
        frame.setVisible(true);
    }

    class MyUI extends javax.swing.plaf.basic.BasicComboBoxUI {

        @Override
        protected JButton createArrowButton() {
            JButton btn = new JButton();
            btn.setIcon(infoIcon);
            btn.setRolloverIcon(warnIcon);
            return btn;
        }
    }
}

关于java - JComboBox 在设置自定义 UI 后丢失键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821086/

相关文章:

java - 为什么这个java类不能编译

java - @DataJpaTest 表在刷新 spring.jpa.hibernate.ddl-auto=create-drop 上找不到

java - Swing 应用程序中的 JTable 设计指南

java - 干净地为很多类添加一些功能

user-interface - 微调警报 ionic

java - jooq-3.2.0和db2数据库

java - org.apache.commons.io.IOUtils.toByteArray 的 Android 等价物

java - JFrame,错误无法对非静态字段进行静态引用

java - 未修饰的 JInternalFrame

c# - MVVM 模式 : an intermediate View between Command binding and ViewModel execute