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

Java JLabel/JButton:在某些系统上,我得到“…”(省略号)在某些系统上我没有。我怎么能强制禁用省略号呢?

洪和风
2023-03-14

在大多数系统上,我的JLabel中的内容显示得很好。它的驻留方式也应该总是足够大,以显示其内容文本,因为我基本上是这样做的:

label.setText(text);
label.setFont(new Font(fontName, 0, 12));
int width = label.getFontMetrics(label.getFont()).stringWidth(text);
int height = 21; // this should always be enough
label.setBounds(new Rectangle(x, y, width, height));

但在一些系统上(不是我自己的系统,所以我不能那么容易调试),它会剪切文本并显示“…”最后。

您可以在这里看到完整的代码,也可以在这里看到示例(Abbildungen_Bijektiv_X3)。

我对朱布顿也有类似的看法。

我怎么能强迫Swing不这么做?(即使它认为组件太小。)

Swing到底在哪里处理这个问题?我浏览了JButton的代码和一些相关的类,但我没有真正找到它剪切文本并添加省略号的代码

共有3个答案

督弘化
2023-03-14

你可以使用跨平台的外观和感觉(比如Nimbus)来阻止这种情况的发生

卫飞
2023-03-14

我现在正在这样做(对于按钮,但对于其他控件,也可以用类似的方式):

static public class ButtonUI extends MetalButtonUI {
    public static ComponentUI createUI(JComponent c) {
        return new ButtonUI();
    }

    @Override public void paint(Graphics g, JComponent c) {
        JSimpleLabel.activateAntiAliasing(g);

        AbstractButton b = (AbstractButton) c;
        ButtonModel model = b.getModel();

        String text = b.getText();
        clearTextShiftOffset();

        // perform UI specific press action, e.g. Windows L&F shifts text
        if (model.isArmed() && model.isPressed()) {
            paintButtonPressed(g,b); 
        }

        FontMetrics metrics = g.getFontMetrics();
        Rectangle2D stringBounds = metrics.getStringBounds(text, g);
        g.drawString(text,
                (b.getWidth() - (int)stringBounds.getWidth()) / 2,
                metrics.getLeading() + metrics.getMaxAscent() + (b.getHeight() - (int)stringBounds.getHeight()) / 2);

        if (b.isFocusPainted() && b.hasFocus()) {
            Rectangle viewRect = new Rectangle();
            final int inset = 1;
            viewRect.x = inset;
            viewRect.y = inset;
            viewRect.width = b.getWidth() - (inset + viewRect.x) - 1;
            viewRect.height = b.getHeight() - (inset + viewRect.y) - 1;
            g.setColor(getFocusColor());
            g.drawRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
        }
    }       
}

public void init() {
    try {
        UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel() {
            private static final long serialVersionUID = 1L;
            @Override public UIDefaults getDefaults() {
                UIDefaults table = super.getDefaults();
                table.put("ButtonUI", ButtonUI.class.getName());
                return table;
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
    // ...
}
蒋健
2023-03-14

不需要设置标签的边界。

这是布局经理的工作。学会使用布局管理器,你就不会有这个问题。

编辑:

布局管理器使用:

label.setSize( label.getPreferredSize() );
 类似资料:
  • 问题内容: 是否有解决方案,以div的最后一行在流体高度(20%)处添加省略号? 我在CSS中找到了该函数,但在我的情况下,行号取决于窗口大小。 问题答案: 如果要将省略号(…)应用于一行文本,CSS可以通过该属性使此操作变得容易。仍然有些棘手(由于所有要求,请参阅下文),但使之成为可能且可靠。 但是,如果要在多行文本上使用省略号(如此处的情况),那么不要指望有什么乐趣。CSS没有执行此操作的标准

  • CentOS Repo已知落后于最新的软件包。以Git为例,我能在CentOS6基础存储库中获得的最新Git版本是1.7.1,它远远落后于Git的实际当前版本。我已经尝试了大量的解决方案,包括Vonc下面有用的答案中列出的解决方案,比如使用存储库覆盖基本版本和安装Git的新版本,以及这里没有列出的其他解决方案,但都没有用。我的下一步是尝试从源代码构建Git,如果有任何结果,我将报告结果。

  • 我已经成功实现了应用程序的深度链接,但我遇到了一个问题。 这个意图过滤器处理所有链接,但我不想捕捉某个url,即。 到目前为止我试过: 我试着输入我想要手动捕获的所有URL 但是我的主页URL不起作用。 如果我使用 然后,它将再次捕获所有url,包括我想忽略的url。 我也尝试过使用android:pathPattern,但它无法理解像这样复杂的正则表达式*$ 当我在字符串中尝试时效果很好。 有人

  • 问题内容: 我正在查看一些代码,并看到了以下符号。我不确定这三个点的含义以及您所说的名称。 谢谢。 问题答案: 这意味着此方法可以接收多个Object作为参数。为了更好地低估,请从此处检查以下示例: 省略号(…)标识可变数量的参数,并在以下求和方法中进行了演示。 在JVM的限制内,使用所需的任意多个用逗号分隔的整数参数来调用sumsum方法。一些示例:sum(10,20)和sum(18,20,30

  • 问题内容: 我在Windows 7(64位)计算机上使用Java已经有一段时间了,并且从未遇到无法创建网络连接的问题。现在,在我正在工作的公司的系统上,我需要设置“ -Djava.net.preferIPv4Stack = true”,否则java进程似乎无法创建单个连接。 缺点是,如果我未设置“ _JAVA_OPTIONS”,则必须配置大量服务才能使用此设置。但是,如果我使用它,Java会向st

  • 问题内容: 我已经搜索过了,但是找不到答案,无论出于什么原因,我都感到羞耻,无法问教授,因为那种感觉当成千上万的人盯着你看时… 无论如何,我的问题是使用括号的重要性是什么?如果我省略它们可以吗?例: 与 我知道它们都可以使用,但是如果省略括号(由于能见度,我倾向于做很多事情)会改变任何东西吗?正如我说的,我知道它有效,我测试了数十次,但是现在我的一些单项作业越来越大,出于某种原因,我出于非理性的恐