gpt4 book ai didi

java - JToggleButton 截断标签文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:52 27 4
gpt4 key购买 nike

当在 Windows 7 JToolBar 中使用时,JToggleButton 有时会截断其标签文本。

请参阅下面代码中的示例。以大写字母 'W' 开头的切换按钮将被截断;以空格(甚至小写 'w')开头的则不会。

这是否仅在 Windows 下发生?有人可以解释为什么会这样吗?

// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6386636

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

/////////////////////// new class

public class Truncation_Example extends JToolBar {

private static final long serialVersionUID = 1L;

/////////////////////// object attributes

JToggleButton toggle_Good;
JToggleButton toggle_Bad;

/////////////////////// constructors

public Truncation_Example() {
toggle_Good = new JToggleButton(new Action_Good());
toggle_Bad = new JToggleButton(new Action_Bad());

this.add(toggle_Good);
this.add(toggle_Bad);
}

/////////////////////// inner classes

public class Action_Good extends AbstractAction {
private static final long serialVersionUID = 1L;
public Action_Good() {
putValue(Action.NAME, " Wrap Good "); // note added space to prevent truncation
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Toggle: " + toggle_Good.getText());
}
}

public class Action_Bad extends AbstractAction {
private static final long serialVersionUID = 1L;
public Action_Bad() {
putValue(Action.NAME, "Wrap Bad"); // label will be truncated if it begins with 'W'
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Toggle: " + toggle_Bad.getText());
}
}

/////////////////////// main

public static void main(String[] args) {
UIManager.put("ToggleButton.select", Color.GREEN);

SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Truncation_Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JToolBar toolBar = new Truncation_Example();
frame.add(toolBar, BorderLayout.NORTH);
frame.setSize(500, 400);
frame.setVisible(true);
}
});
}
}

最佳答案

这个问题与 LookAndFeel 相关,让我解释一下为什么......

如果安装了 MetalLookAndFeel(默认情况下),此示例确实会截断文本。对于任何其他 L&F(Basic、Windows、Nimbus,甚至在我自己的 L&F 上)我都看不到这个问题。 MetalLookAndFeel 似乎在 MetalButtonUI 或 L&F 常量中存在某种错误,导致按钮文本呈现不正确。

我不确定它可能是什么 - 您可以简单地调试 MetalButtonUI 类以查看尺寸计算中发生了什么。无论如何,我怀疑即使你找到了这个问题的根源,你也不会改变任何事情。

关于java - JToggleButton 截断标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162459/

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