Java 摆动对齐图标内的文本

Java Swing align text inside icon

如何将文本对齐到 JButton 的左侧,但图标仍然居中并且没有被文本推开?

错误对齐:

我更想要这样,但文本是左对齐的:

我已经测试了 setHorizontalAlignment()setHorizontalTextPosition 方法。
我还想避免在 JButton 上放置 Jlabel。

我的代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

public class Example extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Example frame = new Example();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Example() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(null);
        setContentPane(contentPane);
        
        JButton settings_bnt = new JButton("settings");
        
        settings_bnt.setIcon(new ImageIcon(Example.class.getResource("/grafics/MainGUI/Settings.png")));
        settings_bnt.setFont(new Font("Tahoma", Font.PLAIN, 17));
        settings_bnt.setForeground(Color.WHITE);
        settings_bnt.setHorizontalAlignment(SwingConstants.CENTER);
        settings_bnt.setHorizontalTextPosition(SwingConstants.CENTER);
        settings_bnt.setBounds(10, 10, 112, 35);
        settings_bnt.requestFocus();
        add(settings_bnt);
    }

}

想要一个以图标图像为背景的按钮。

看了之后,最简单的方法是让 JButton 具有正常的图标、文本和按钮外观:

    setIconTextGap(-100);        

其中 100 与左侧图标的宽度相关。

第二种选择是使用 HTML text:

    URL backgroundURL = getClass().getResource("/background.png");
    String text = "Panic!";
    text = "<html><div style='padding: 3px 10px 3px 10px; background: url("
        + backgroundURL.toExternalForm() + ")'>"+ text + "</div>";
    setText(text);