Java 将框架大小与其对象大小绑定

Java 将框架大小与其对象大小绑定,java,swing,resize,jframe,Java,Swing,Resize,Jframe,如何更改下面的代码在更改帧大小后,帧上其他对象的大小也会以相同的比率更改 package application; import javax.swing.*; import java.awt.*; public class Program extends JFrame { private GroupLayout layout; private GroupLayout.Group groupX; private GroupLayout.Group groupY;

如何更改下面的代码在更改帧大小后,帧上其他对象的大小也会以相同的比率更改

package application;

import javax.swing.*;
import java.awt.*;

public class Program extends JFrame {

    private GroupLayout layout;
    private GroupLayout.Group groupX;
    private GroupLayout.Group groupY;

    public Program() {
        initialize();
    }

    private void initialize() {
        this.layout = new GroupLayout(this.getContentPane());
        this.groupX = this.layout.createParallelGroup(GroupLayout.Alignment.LEADING);
        this.groupY = this.layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    }

    public void addComponent(Component component, int x, int y) {

        getContentPane().setLayout(layout);

        groupX.addGroup(layout.createSequentialGroup()
                .addGap(x, x, x)
                .addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));

        groupY.addGroup(layout.createSequentialGroup()
                .addGap(y, y, y)
                .addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));    
        layout.setHorizontalGroup(groupX);
        layout.setVerticalGroup(groupY);
    }


    public static void main(String[] args) {
        Program jf = new Program();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setBounds(new Rectangle(0, 0, 250, 100));
        JButton p = new JButton("Click!!");
        jf.addComponent(p, 86, 20);
        jf.setVisible(true);
    }
}
如何更改下面的代码在更改帧大小后,帧上其他对象的大小也会以相同的比率更改

package application;

import javax.swing.*;
import java.awt.*;

public class Program extends JFrame {

    private GroupLayout layout;
    private GroupLayout.Group groupX;
    private GroupLayout.Group groupY;

    public Program() {
        initialize();
    }

    private void initialize() {
        this.layout = new GroupLayout(this.getContentPane());
        this.groupX = this.layout.createParallelGroup(GroupLayout.Alignment.LEADING);
        this.groupY = this.layout.createParallelGroup(GroupLayout.Alignment.LEADING);
    }

    public void addComponent(Component component, int x, int y) {

        getContentPane().setLayout(layout);

        groupX.addGroup(layout.createSequentialGroup()
                .addGap(x, x, x)
                .addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));

        groupY.addGroup(layout.createSequentialGroup()
                .addGap(y, y, y)
                .addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));    
        layout.setHorizontalGroup(groupX);
        layout.setVerticalGroup(groupY);
    }


    public static void main(String[] args) {
        Program jf = new Program();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setBounds(new Rectangle(0, 0, 250, 100));
        JButton p = new JButton("Click!!");
        jf.addComponent(p, 86, 20);
        jf.setVisible(true);
    }
}

我想说,我不喜欢
GroupLayout
,但那只是我:d

jButton1 = new javax.swing.JButton();

jButton1.setText("jButton1");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  .addGroup(layout.createSequentialGroup()
    .addGap(152, 152, 152)
    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 143, Short.MAX_VALUE)
    .addGap(175, 175, 175))
);
layout.setVerticalGroup(
  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  .addGroup(layout.createSequentialGroup()
    .addGap(137, 137, 137)
    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addGap(94, 94, 94))
);


如果我理解正确,您想缩放ui吗?如果是这样的话,这是不受支持的(与LayoutManager的任务无关)。你必须自己实现它,f.i.使用JLayer(jdk7)或JXLayer(jdk6)不。我不想缩放用户界面。我想实现一些类似于C#中的锚定的东西,这意味着如果我更改帧的宽度,其对象的宽度也会更改。好的,感谢您的澄清(但请注意,您的图像是误导性的,因为字体大小会随着按钮大小而增加,这在缩放时不会发生)只需修改代码以获取x/y和宽度/高度值,我也不喜欢GroupLayout me-但是,它是为在构建器中使用而设计的,不是为手动编码,因此它在传达后者方面做得很好:-)