当前位置: 首页 > 知识库问答 >
问题:

JComboBox如何显示项目的右端?

酆鸿彩
2023-03-14

我有以下Java代码:

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class EnumsRightVisible {

    public void show() {
        JFrame frame = new JFrame("Combo box");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        String[] items = {"aaaaaaaaa__________zzzzzzzzz",
                          "aaaaaaaaa__________zzzzzzzzz",
                          "aaaaaaaaa__________zzzzzzzzz"};
        JComboBox combo = new JComboBox(items);
        combo.setPreferredSize(new Dimension(100,20));
        frame.add(combo, BorderLayout.CENTER);
        frame.setLocation(600, 100);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        EnumsRightVisible enumsRightVisible = new EnumsRightVisible();
        enumsRightVisible.show();
    }
}

运行它,你可以看到可见文本是左向的。

请注意,这段代码并不能解决我的问题(它将文本向右对齐,但仅在组合框展开时):

((JLabel)comboBox.getRenderer()).setHorizontalAlignment(JLabel.RIGHT);

如何在同一窗口中显示文本的右端(...__zzzzzz)?提前致谢!

共有2个答案

鲁昕
2023-03-14
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ComboBoxDemo extends JFrame {

    public ComboBoxDemo() {
        JComboBox comboBox = new JComboBox();
        
        ((JLabel)comboBox.getRenderer()).setHorizontalAlignment(JLabel.RIGHT);
        
        comboBox.addItem("Apple");
        comboBox.addItem("Orange");
        comboBox.addItem("Mango");
        
        getContentPane().add(comboBox, "North");
        setSize(200, 100);
        this.setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
                new ComboBoxDemo().setVisible(true);
    }
}
import java.awt.Component;
import java.awt.ComponentOrientation;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class ComboBoxDemo extends JFrame {

    public ComboBoxDemo() {
        JComboBox comboBox = new JComboBox();

        setListCellRendererOf(comboBox);
        
        comboBox.addItem("Apple");
        comboBox.addItem("Orange");
        comboBox.addItem("Mango");

        getContentPane().add(comboBox, "North");
        setSize(200, 100);
        this.setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private void setListCellRendererOf(JComboBox comboBox) {
        comboBox.setRenderer(new ListCellRenderer() {
            
            @Override
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

                Component component = new DefaultListCellRenderer()
                        .getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

                component.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                return component;
            }
        });
    }
    public static void main(String[] args) {
                new ComboBoxDemo().setVisible(true);
    }
}
尚鸿才
2023-03-14

使用自定义渲染器,该渲染器使用FontMetrics测量字符串的宽度,并手动执行省略号(…)。更多信息请点击此处:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

 类似资料:
  • 这可能是一个骗局——我找不到它——我基本上只是试图通过提供我自己的ListCellRenler来自定义JComboBox显示: 当我展开JComboBox列表时,组件会正确显示名称。但是,在选择项目时,显示将恢复为myObj的toString()值。 我错过什么了吗?

  • 问题内容: 我正在尝试将数据库项目显示为,这是我的代码。 我确实宣布并 该方法/功能将被调用,然后用户按下登录按钮。 我现在遇到的问题是,它仅显示一项,而我的数据库有多项。 有人知道为什么吗? 问题答案: 将您从数据库中获得的数据存储在矢量对象中,完成后将矢量对象在组合框中设置为新模型。试试这个, 不要 在 循环 内 关闭连接。

  • 我有一个,其中有8个项目,我想显示其中的所有项目,但在特定条件下,用户只能选择前两个项目,因此我编写了程序,如果条件为真,用户选择任何其他选项,则会显示一个消息框,显示然后自动选择默认值。到现在为止,一直都还不错。 但现在的问题是,用户无法通过查看的选项来判断他可以选择哪些选项,因此我想做的是,如果条件为真,那么除前两个选项之外的所有选项都应该被禁用(或灰显或其他),这样用户就可以判断出您无法选择

  • 这是我的代码,我想在右侧显示注册和登录

  • 问题内容: 这类似于我昨天提出的问题,但更具体地针对该问题。向已经包含各种小部件的NetBeans项目中添加JFreeChart的正确方法是什么?我的updateChart()隐藏了整个JFrame。我想将JFreeChart添加到JFrame中。 更正的代码: 问题答案: 我的updateChart()隐藏了整个JFrame。 那是因为您要用免费图表中的面板替换框架的内容窗格。 我不知道您使用的

  • 我正在做一个SWT项目,但是我将广泛使用来生成BufferedImages。我将以这种方式生成数十万张图像。 问题是,SWT似乎无法显示BuffereImage,并且有自己的类。我知道可以将BuffereImage转换为SWT的映像,但SWT的映像似乎需要手动处理,并且不像Swing的BuffereImage那样具有自动垃圾收集功能。 另外,我认为计算机要不断地从BuffereImage转换为Im