gpt4 book ai didi

java - 使用自定义 ComboBoxUI

转载 作者:行者123 更新时间:2023-11-30 06:23:12 25 4
gpt4 key购买 nike

我试图通过扩展 BasicComboBoxUI 类来更改 JComboBox 组件的外观。问题是当我使用扩展的 MyComboBoxUI 类时,组合框停止正常工作。

这个 SSCCE 证明了我的问题。第一个组合框显示第二个组合框的选中项,第一个组合框没有绘制箭头按钮,无法选择项。

注意:我以这种方式更改 JButton 组件没有问题。

主类:

import javax.swing.JFrame;
import javax.swing.UIManager;

public class Main {

public static void main(String[] args) {

UIManager.put("ComboBoxUI", "MyComboBoxUI");

javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
ContentPane contentPane = new ContentPane();
frame.setContentPane(contentPane);
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

ContenPane 类:

import java.awt.FlowLayout;
import javax.swing.JComboBox;
import javax.swing.JPanel;

public class ContentPane extends JPanel {

public ContentPane() {
setLayout(new FlowLayout());
JComboBox<String> firstComboBox = new JComboBox<>();
firstComboBox.addItem("firstComboBox - 1. item");
firstComboBox.addItem("firstComboBox - 2. item");
firstComboBox.addItem("firstComboBox - 3. item");
add(firstComboBox);
JComboBox<String> secondComboBox = new JComboBox<>();
secondComboBox.addItem("secondComboBox - 1.item");
secondComboBox.addItem("secondComboBox - 2. item");
secondComboBox.addItem("secondComboBox - 3. item");
add(secondComboBox);
}
}

MyComboBoxUI 类:

import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicComboBoxUI;

public class MyComboBoxUI extends BasicComboBoxUI {

private static MyComboBoxUI myComboBoxUI = new MyComboBoxUI();

public static ComponentUI createUI(JComponent component) {
return myComboBoxUI;
}

}

最佳答案

我想你想要:

return new MyComboBoxUI();

当你有一个静态变量时,这意味着每个组合框将共享相同的 UI 实例。

关于java - 使用自定义 ComboBoxUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com