2017-09-04 38 views
0

由于我不会详细讨论的原因,我仅限于使用流布局管理器。这个问题以及我需要将组件保持在同一条线上的一个明显问题是,它将组件向下推进到框架中,因为它们超过了面板边缘。使用流布局管理器保持组件水平对齐

是否有方法可用于对齐组件以确保标签及其相应的文本字段显示在同一行上?

回答

0

如果我理解正确,主要问题是标签和输入是分开的(右侧标签和左侧下一行输入)。

该问题的一个解决方案是将组标签和输入字段组合到子面板中,并将该子面板添加到使用FlowLayout的主面板。

下面的代码演示了此技术:

import java.awt.FlowLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

/** 
* 
* @author acampos 
*/ 
public class Main02 { 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     JPanel mainPanel = new JPanel(); 

     JPanel dynamicPanel; 
     JLabel dynamicLabel; 
     JTextField dynamicInput; 

     for (int i = 0; i < 5; i++) { 
      // Creates the panel that will contain the Label AND the Input 
      dynamicPanel = new JPanel(); 
      // Creates the dynamic label 
      dynamicLabel = new JLabel("Label " + i + ": "); 
      // Creates the dynamic text field 
      dynamicInput = new JTextField(10); 
      // Adds the label and the text field to the dynamic panel 
      dynamicPanel.add(dynamicLabel); 
      dynamicPanel.add(dynamicInput); 
      dynamicPanel.setSize(100, 100); 
      // Adds the dynamic panel to the main panel <-- HERE IS THE KEY 
      mainPanel.add(dynamicPanel); 
     } 

     // Set the FlowLayout to the MAIN PANEL, so the dynamic panels 
     // will 'flow' but the label and the text field will be kept together 
     mainPanel.setLayout(new FlowLayout(3)); 
     // Adds the main panel (which contains the dynamic panels) to the main frame 

     jFrame.add(mainPanel); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jFrame.setVisible(true); 
     jFrame.setSize(600, 150); 
     jFrame.setResizable(true); 
    } 
} 

当你运行该代码(是的,你可以运行它),并改变Jframe的大小,你看到标签和输入不拆了。

注意:对于下一个问题,我强烈建议您与社区分享您的代码。这是一个很好的做法,更详细的在https://stackoverflow.com/help/how-to-ask