title: JButton: Icon left-aligned, text right-aligned
body: <p>I'm trying to create a <code>JButton</code> with an icon and some text in it. My problem is that I want the icon to be left-aligned and the text right-aligned (It isn't necessary to be right-aligned, but I don't want the text to stick to the icon).</p>
  
  <p>Not being able to do this on my own, I tried a slightly different solution. I used the <code>iconTextGap</code> to create some space between the icon and the text, what worked fine in principle, but when I create multiple buttons, which all have the width of the widest, the icon isn't at the very left anymore (except in the button with the longest text).</p>
  
  <p>I included a code to demonstrate that:</p>
  
  <pre><code>import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.awt.Insets;
  import java.io.File;
  import java.net.MalformedURLException;
  
  import javax.swing.BorderFactory;
  import javax.swing.ImageIcon;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.SwingConstants;
  
  
  public class Main{
  
   private JFrame frame;
   private JPanel buttonPanel;
   private GridBagConstraints constraints;
  
   public Main() throws MalformedURLException{
  
      frame = new JFrame();
  
      buttonPanel = new JPanel();
      frame.add(buttonPanel);
  
      buttonPanel.setLayout(new GridBagLayout());
      constraints = new GridBagConstraints();
  
      constraints.insets = new Insets(5, 5, 3, 5);
      constraints.fill = GridBagConstraints.HORIZONTAL;
      constraints.gridx = 0;
      constraints.gridy = 0;
  
  
      String[] text = { "some Text", "this text is longer" };
  
      for (int i = 0; i &lt; text.length; i++) {
          JButton button= new JButton(text[i], new ImageIcon(new File("icon.png").toURI().toURL()));
          button.setAlignmentX(SwingConstants.WEST);
          button.setIconTextGap(30);
          button.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 10));
  
  
          buttonPanel.add(button, constraints);
          constraints.gridy++;
      }
  
      frame.pack();
      frame.setVisible(true);
  
  
  }
  
   public static void main(String[] args){
      try {
          new Main();
      } catch (Exception e) {
          e.printStackTrace();
      }
   }
  
  }
  </code></pre>
  
  <p>Does anyone know of a way to have the icon at the left end and have some space between the icon and the text (or the text right-aligned)?</p>