2016-04-23 63 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