2016-04-23 66 views

回答

1

它不是在基础JDK的支持。没有这样的事情,只能集中文本。文本和图标都被绘制在一起,可以左对齐,居中或右对齐。

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

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

然后,您可以设置按钮的文本,现在文本将位于按钮和边框的边界内。

Basic代码:

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

我做了一个演示测试你。

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

demo screenshot