首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JToggleButton截断标签文本

JToggleButton截断标签文本
EN

Stack Overflow用户
提问于 2012-11-01 00:23:47
回答 1查看 701关注 0票数 9

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

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

这种情况只在Windows下发生吗?有人能解释一下为什么会发生这种情况吗?

代码语言:javascript
复制
// 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);
         }
      });
   }
}
EN

回答 1

Stack Overflow用户

发布于 2012-11-01 21:06:24

这个问题是与LookAndFeel相关的,让我来解释一下原因...

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13162459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档