繁体   English   中英

更改Jbutton上的图标位置

[英]Changing Icon Position On Jbutton

我一直在netbeans上开发一个Java项目。 我想知道当文本居中时如何将JButton上的图标移到左或右角。 你能帮我么 ?

http://i.stack.imgur.com/PiLhq.jpg

我为您做了一个演示测试。

public class Test3 {
        private static final int WIDTH = 300;

        public Test3() {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(WIDTH, 500);
            frame.setResizable(false);
            frame.setLayout(new BorderLayout());

            JPanel panel = (JPanel) frame.getContentPane();
            panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

            //my icons
            Icon iconOne = UIManager.getIcon("OptionPane.informationIcon");
            Icon iconTwo = UIManager.getIcon("OptionPane.questionIcon");
            Icon iconThree = UIManager.getIcon("OptionPane.errorIcon");
            Icon iconFour = UIManager.getIcon("OptionPane.warningIcon");

            JButton jButton1 = createButton(iconOne, "Button 1", true) ;
            JButton jButton2 = createButton(iconTwo, "Button 2 sadasddfgdgdfgd", true) ;
            JButton jButton3 = createButton(iconThree, "Button 3 sad asd a", true) ;
            JButton jButton4 = createButton(iconFour, "Button 4 sadasd asdfrfere", true) ;
            JButton jButton5 = createButton(iconTwo, "Button 5 sad", false) ;
            JButton jButton6 = createButton(iconFour, "Button 6 sadrfere", false) ;
            JButton jButton7 = createButton(iconThree, "Button 7 sadarfere", false) ;
            JButton jButton8 = createButton(iconFour, "Button 8 sadasd asdfrfere", false) ;

            panel.add(jButton1);
            panel.add(jButton2);
            panel.add(jButton3);
            panel.add(jButton4);
            panel.add(jButton5);
            panel.add(jButton6);
            panel.add(jButton7);
            panel.add(jButton8);

            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }

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

        private JButton createButton(Icon p_jIcon, String p_strButtonText, boolean p_bIsIconLeftSide){
            int nButtonHeight = 60;
            int nGap = 40;

            JButton jButton = new JButton();
            jButton.setIcon(p_jIcon);
            jButton.setIconTextGap(nGap);

            if(p_bIsIconLeftSide){
                jButton.setHorizontalAlignment(SwingConstants.LEFT);
                jButton.setHorizontalTextPosition(SwingConstants.RIGHT);
                jButton.setText(p_strButtonText);
            }else{
                //if you want to set icon position to right side of the button
                jButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
                jButton.setHorizontalAlignment(SwingConstants.RIGHT);
                jButton.setHorizontalTextPosition(SwingConstants.LEFT);
                jButton.setText("<html><div align=left width=200px>" + p_strButtonText + "</div></html>");
            }

            Dimension jSize = new Dimension(WIDTH, nButtonHeight);
            jButton.setPreferredSize(jSize);
            jButton.setMaximumSize(jSize);
            jButton.setMinimumSize(jSize);
            return jButton;
        }
    }

演示截图

基本JDK不支持它。 没有只将文本居中的事情。 文本和图标都绘制在一起,左对齐,居中对齐或右对齐。

但是,您可以使用Component Border类。

这是一个自定义边框,允许您将组件添加到边框。 因此,您可以创建一个包含您的Icon的JLabel并将标签用作ComponentBorder

然后,您可以只设置按钮的文本,现在文本将居中于按钮及其边框的边界内。

基本代码:

JButton button = new JButton("Centered Text");
JLabel label = new JLabel( new ImageIcon("...") );

ComponentBorder cb = new ComponentBorder( label );
cb.setEdge( ComponentBorder.Edge.LEFT );
cb.install( button );

add(button, BorderLayout.NORTH);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM