簡體   English   中英

將JLabel在gridbaglayout中的面板左側對齊

[英]Align JLabel to the left of the panel in a gridbaglayout

我有一個面板,其中指定了網格袋布局。 我基本上有1列和4行。 默認情況下,標簽與中心對齊。 如何將它們向左對齊?

  private void addLabel(String name, int gridx, int gridy, int anchor ){
            gbc.gridx=gridx;
            gbc.gridy=gridy;
            JLabel label=new JLabel(name);
            gbc.fill=GridBagConstraints.HORIZONTAL;
            gbag.setConstraints(label, gbc);
            panel1.add(label);

呼叫者行是:

gbc=new GridBagConstraints();
        gbag=new GridBagLayout();
panlel1.setLayout(gbag);
addLabel("    Exemption type", 0, 0,anchor );

嘗試

JLabel myLabel = new JLabel("Fubar", SwingConstants.LEFT);

或者,您可以通過調用myLabel.setHorizontalAlignment(SwingConstants.LEFT);在已創建的JLabel上執行相同操作myLabel.setHorizontalAlignment(SwingConstants.LEFT);

編輯:例如:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.*;

public class GridBagExample {
   private static void createAndShowUI() {
      String[] data = {"one", "two", "three", "four"};

      JPanel panel = new JPanel(new GridBagLayout());
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridx = 0;
      gbc.gridy = 0;
      gbc.gridwidth = 1;
      gbc.gridheight = 1;
      gbc.anchor = GridBagConstraints.WEST;
      gbc.fill = GridBagConstraints.BOTH;
      gbc.weightx = 1.0;  // **** comment this line out to see effect ****
      gbc.weighty = 1.0;  // **** comment this line out to see effect ****

      for (int i = 0; i < data.length; i++) {
         JLabel label = new JLabel(data[i]);
         gbc.gridy = i;
         panel.add(label, gbc);
      }

      JFrame frame = new JFrame("GridBagExample");
      frame.getContentPane().add(panel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

這是我解決此問題的方法。 重要的是

gbc.anchor = GridBagConstraints.WEST;

在您指定所需的布局單元之后,以及在將組件添加到面板之前,即會調用上述方法。

GridBagConstraints 錨點

當組件小於其顯示區域時,將使用此字段。 它確定在顯示區域中放置組件的位置。 ...

下面基本上是我的實現方式。

public class ControlPanel extends JPanel{...    
        ControlPanel(){
          this.setLayout(new GridBagLayout());
          //create components
          ...

          GridBagConstraints gbc = new GridBagConstraints(); 

          //space components out a little
          gbc.insets = new Insets(5,5,5,5);

          gbc.gridx = 0;
          gbc.gridy = 0;
          this.add(button_btn,gbc);

          gbc.gridx = 1;
          gbc.gridy = 0;
          this.add(spinner1_pnl,gbc);

          gbc.gridx = 2;
          gbc.gridy = 0;
          this.add(spinner2_pnl,gbc);

          gbc.gridx = 3;
          gbc.gridy = 0;
          this.add(checkbox1_chk,gbc);

          gbc.gridx = 4;
          gbc.gridy = 0;
          this.add(checkbox2_chk,gbc);

          gbc.gridx = 0;
          gbc.gridy = 1;
          gbc.gridwidth = 3;  //span 3 columns
          gbc.anchor = GridBagConstraints.WEST;
          this.add(results_lbl,gbc);
        }
    }

在這種情況下,我在其他一些組件下方放置了一個標簽,但最重要的是,該標簽在其單元格內保持(西向)對齊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM