2013-04-03 80 views
1

我从java2s得到了一个JToggleButton的例子。在代码中,如果文本是“West”,我看到切换按钮不能正确显示文本。 West显示为We ..其他一切都没问题。但是当text =“west”,即w很小时没有问题。这是一个错误?JToggleButton API中可能存在的错误?

enter image description here

代码:

import java.awt.BorderLayout; 

import javax.swing.JFrame; 
import javax.swing.JToggleButton; 

public class MainClass { 
public static void main(String args[]) { 
JFrame f = new JFrame("JToggleButton Sample"); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.add(new JToggleButton("North"), BorderLayout.NORTH); 
f.add(new JToggleButton("East"), BorderLayout.EAST); 
f.add(new JToggleButton("West"), BorderLayout.WEST); 
f.add(new JToggleButton("Center"), BorderLayout.CENTER); 
f.add(new JToggleButton("South"), BorderLayout.SOUTH); 
f.setSize(300, 200); 
f.setVisible(true); 
} 
} 
+1

尝试使用f.pack();而不是f.setSize(...) – MadProgrammer 2013-04-03 21:14:39

+0

@MadProgrammer - 较小的窗口,但错误仍然存​​在。它发生在文本= West时。 – SuperStar 2013-04-03 21:16:50

+0

那么你把所有的按钮文字都改为“West”了? – MadProgrammer 2013-04-03 21:17:30

回答

2

MetalLookAndFeel - 的getPreferredSize计算不正确

enter image description here

SystemLookAndFeel

enter image description here

雨云

enter image description here

物质

enter image description here

从代码(通过使用相同的BorderLayout的问题与JFrame的,如的JPanel容器)

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JToggleButton; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class MainClass { 

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

      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(
          "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel"); 
        //UIManager.getDefaults(); 
       } catch (Exception e) { 
       } 
      } 
     }); 

     /*try { 
      //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(laf.getName())) { 
        UIManager.setLookAndFeel(laf.getClassName()); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }*/ 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame f = new JFrame("JToggleButton Sample"); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       JPanel panel = new JPanel(); 
       panel.setLayout(new BorderLayout()); 
       panel.add(new JToggleButton("North"), BorderLayout.NORTH); 
       panel.add(new JToggleButton("East"), BorderLayout.EAST); 
       panel.add(new JToggleButton("West"), BorderLayout.WEST); 
       panel.add(new JToggleButton("Center"), BorderLayout.CENTER); 
       panel.add(new JToggleButton("South"), BorderLayout.SOUTH); 
       f.add(panel); 
       f.pack(); 
       //f.setSize(300, 200); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
+0

与Win8相同,因为我看到OPs截图 – mKorbel 2013-04-03 21:39:34

+0

看起来像是它在MetalLookAndFeel中的错误。但是它对于oracle来说可能太小了。不要在代码中使用任何以w开头的单词。 – SuperStar 2013-04-03 21:41:47

+0

@SuperStar然后报告,[你会成为官方BugParade中的自己的错误的真正的超级明星], – mKorbel 2013-04-03 21:44:20

2

似乎只是正常工作对我来说...

enter image description hereenter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JToggleButton; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestLayout23 { 

    public static void main(String[] args) { 
     new TestLayout23(); 
    } 

    public TestLayout23() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame f = new JFrame("JToggleButton Sample"); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.add(new JToggleButton("North"), BorderLayout.NORTH); 
       f.add(new JToggleButton("East"), BorderLayout.EAST); 
       f.add(new JToggleButton("West"), BorderLayout.WEST); 
       f.add(new JToggleButton("Center"), BorderLayout.CENTER); 
       f.add(new JToggleButton("South"), BorderLayout.SOUTH); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 

     }); 
    } 

} 
+0

看起来像Mac OS UI。我在赢得DODO-ws。尝试删除设置的外观和感觉代码。 – SuperStar 2013-04-03 21:26:32

+0

在Win7上不会发出MetalLookAndFeel Java6/7 – mKorbel 2013-04-03 21:28:55

+0

@mKorbel - 不知道我是否理解你。你的意思是 - 不是问题。它只发生在Win7 Java6/7上的MetalLookAndFeel中。对 ? – SuperStar 2013-04-03 21:30:31