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

为什么JComboBox忽略PrototypeDisplayValue

邹涵畅
2023-03-14
问题内容

与这两个帖子@iMohammad有关, 在单击JButtonJava时使用JButton增加/减少textArea内的字体大小并在单击JButton
Java时更改字体样式 …,我面临着一个非常有趣的问题,该问题来自于on
作为参数JComboBox传递屏幕setPrototypeDisplayValue``JComboBox's size

请如何JComboBox动态调整大小取决于Font,与我在sscce中尝试过的另一个JComponent正常工作一样

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

public class ComboBoxFontChange extends JFrame {

    private static final long serialVersionUID = 1L;
    private JComboBox cbox = new JComboBox();
    private JTextField tfield = new JTextField("Change");
    private JLabel label = new JLabel("Cash");
    private JButton button = new JButton("++ Font");
    private JTextField text;
    private JPanel panel = new JPanel();

    public ComboBoxFontChange() {
        super("Combo Box Font change");
        text = (JTextField) cbox.getEditor().getEditorComponent();
        cbox.addItem("Change");
        cbox.addItem("Cash");
        cbox.addItem("Font");
        tfield.setColumns(5);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Font font = cbox.getFont();
                font = font.deriveFont((float) (font.getSize2D() * 1.10));
                cbox.setFont(font);
                // EDIT
                cbox.setPrototypeDisplayValue(cbox.getSelectedItem().toString());
                tfield.setFont(font);
                button.setFont(font);
                label.setFont(font);
                //panel.revalidate();
                //panel.repaint();
                pack();
            }
        });
        //panel.setLayout(new GridLayout(2, 2, 10, 10));
        panel.add(cbox);
        panel.add(label);
        panel.add(tfield);
        panel.add(button);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ComboBoxFontChange frame = new ComboBoxFontChange();
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

问题答案:

我调试了您的SSCCE,并且传递给的setPrototypeDisplayValue值为空字符串。将行更改为

cbox.setPrototypeDisplayValue(cbox.getSelectedItem());

使一切正常工作。删除对的调用setPrototypDisplayValue也会使程序按预期方式运行。

编辑:

另一个问题是,没有为原型显示值触发任何事件,因为您像以前一样将其设置为先前的值,并且仅在值实际更改时才触发事件。如果添加cbox.setPrototypeDisplayValue("");before
cbox.setPrototypeDisplayValue(cbox.getSelectedItem().toString()),则即使在JDK
1.6上,也可以使一切正常运行。我同意,鉴于字体已更改,应该重新计算首选大小,但至少此更改是一种解决方法。



 类似资料:
  • 我对iOS布局约束的机制有误解。请参阅下面列出的我放在viewDidLoad中的代码。 在我看来,我的意图是明确的。我想在设备屏幕的中央看到一个按钮。但我只能看到下面的图片。 我在项目控制台中有一个输出,非常可怕,我无法从中理解任何东西。 无法同时满足约束。可能以下列表中至少有一个约束是您不想要的。尝试以下方法:(1)查看每个约束,并尝试找出您不期望的约束;(2) 查找添加了一个或多个不需要的约束

  • 我在JMeter中创建了一个脚本,它从CSV获取登录凭据。 用户名:pshah 密码:欢迎 当我执行脚本时,我可以在POST中看到值: 用户名:pshah 但密码:欢迎 我想知道原因”

  • 问题内容: // Ignore z-index if position is set to a value where z-index is ignored by the browser // This makes behavior of this function consistent across browsers // WebKit always returns auto if the el

  • 问题内容: 我正在尝试在包级别使用Hibernate @TypeDef批注,这与Hibernate文档中所描述的完全相同。我正在使用和。代码可以编译,并且在类路径中,但是Hibernate仍然看不到它。 如果我上课,那是行得通的,但是如果我把放在那,那是没有用的。我试图用Google搜索,但找不到任何有用的信息。 谢谢! 问题答案: 您可能需要添加一个 到您的Hibernate配置文件,或调用co

  • 下面是roles/role1/tasks/main.yml: 我的库存: 最后是host_vars/localhost.yml: 使用运行playbook时出现以下错误

  • 问题内容: 我有一个带有关系的实体,我想通过一个查询来检索它,因此使用。有时,Hibernate不尊重它,而是发出N + 1 秒。随着 有时 我的意思是,因为我不知道是什么触发它,我有案件对不同的查询,这可能发生,或者不一样的类。 这是带有我使用的注释的简化实体: 用 我希望单个查询能够同时获取其及其内容,例如 相反,我得到了第一选择所有N S和那么N 献给所有S(考虑没有缓存)。 我发现了许多类