質問

I got an example for JToggleButton from java2s. In the code, I see that a toggle button does not display text properly if the text is "West". West is shown as We.. . Everything else is okay. But there is no problem when text = "west", ie w small. Is this a bug?

enter image description here

Code:

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);
 }
}
役に立ちましたか?

解決

MetalLookAndFeel - getPreferredSize isn't calculated correctly

enter image description here

SystemLookAndFeel

enter image description here

Nimbus

enter image description here

Substance

enter image description here

from code (same issue with JFrame, JPanel as container by using BorderLayout)

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);
            }
        });
    }
}

他のヒント

Seems to work just fine for me...

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);
            }

        });
    }

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top