程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JavaSwing GroupLayout:调整大小和限制组件大小大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决JavaSwing GroupLayout:调整大小和限制组件大小?

开发过程中遇到JavaSwing GroupLayout:调整大小和限制组件大小的问题如何解决?下面主要结合日常开发的经验,给出你关于JavaSwing GroupLayout:调整大小和限制组件大小的解决方法建议,希望对你解决JavaSwing GroupLayout:调整大小和限制组件大小有所启发或帮助;

在此示例中,GroupLayout可以简单地依靠标签的首选大小,而不必诉诸任何setXXXSize()方法。用这种方法

  • 标签的空间始终容纳最大的标签。
  • 文本字段可以通过有用的方式调整大小。
  • 跨平台和字体的结果是正确的。
  • “你无需为大多数组件指定任何内容,因为组件本身具有默认的所需调整大小行为。” — 如何使用GroupLayout:组件大小和可调整大小 使用GroupLayout.Alignment.TRAIliNG右对齐标签是个人喜好,我添加了第二个面板以嵌套在另一个布局中显示其工作方式。
import java.awt.EventQueue;
import javax.swing.borderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextFIEld;

/** @see http://stackoverflow.com/questions/8492065 */
public class GroupPanel extends JPanel {

    private JLabel label1 = new JLabel("Primary:");
    private JTextFIEld fIEld1 = new JTextFIEld(16);
    private JLabel label2 = new JLabel("Secondary:");
    private JTextFIEld fIEld2 = new JTextFIEld(16);
    private JLabel label3 = new JLabel("Tertiary:");
    private JTextFIEld fIEld3 = new JTextFIEld(16);

    public GroupPanel(int n) {
        this.setborder(borderFactory.createTitledborder("Panel " + n));
        GroupLayout layout = new GroupLayout(this);          
        this.setLayout(layout);
        layout.setautocreateGaps(true);
        layout.setautocreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAIliNG)
                .addComponent(label1)
                .addComponent(label2)
                .addComponent(label3))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(fIEld1)
                .addComponent(fIEld2)
                .addComponent(fIEld3))
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASEliNE)
                .addComponent(label1)
                .addComponent(fIEld1))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASEliNE)
                .addComponent(label2)
                .addComponent(fIEld2))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASEliNE)
                .addComponent(label3)
                .addComponent(fIEld3))
        );
    }

    private static voID display() {
        JFrame f = new JFrame("GroupPanel");
        f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
        f.add(new GroupPanel(1));
        f.add(new GroupPanel(2));
        f.add(Box.createVerticalglue());
        f.pack();
        f.setLocationrelativeTo(null);
        f.setVisible(true);
    }

    public static voID main(String[] args) {
        EventQueue.invokelater(new Runnable() {

            @OverrIDe
            public voID run() {
                display();
            }
        });
    }
}

解决方法

我正在使用GroupLayout一些动态生成的数据输入形式来管理组件。布局大致如下:

*-----------------------------------------------*
| label A     |   field A                       | 
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*

我将2个平行组用于水平布局,并将一个顺序组用于垂直布局。在大多数情况下,一切都很好。

我想将标签的最大宽度(只是的实例JLabel)限制为父级宽度的1/3 JFrame。如果将JFrame其设置为固定大小,这将是微不足道的,但是我必须处理它的调整大小。

我正在ComponentListener.componentResized()从接收事件,JFrame但是一旦收到这样的事件,我就该做什么了。

我试过这种方法没有任何运气:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width,maxW),l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}

谁能建议一种可以限制标签宽度的方法?

我可能每次都可以从头开始重新构建布局,但是我觉得应该有一个更简单的方法。

大佬总结

以上是大佬教程为你收集整理的JavaSwing GroupLayout:调整大小和限制组件大小全部内容,希望文章能够帮你解决JavaSwing GroupLayout:调整大小和限制组件大小所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: