2013-04-04 73 views
0

如何在改变帧大小之后更改代码,帧上其他对象的大小是否也会以相同的比例改变?绑定帧大小及其对象大小

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); 
    } 
} 

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

enter image description here

+0

如果我理解正确,你想放大用户界面?如果是这样,那就不支持(并且与LayoutManager的任务无关)。你必须自己实施它,f.i.使用JLayer(jdk7)或JXLayer(jdk6) – kleopatra 2013-04-04 08:52:56

+0

不。我不想放大UI。我想实现类似于C#中的锚点,这意味着如果我改变框架的宽度,它的对象的宽度也会改变。 – user2049371 2013-04-04 09:36:50

+0

好的,谢谢澄清(但请注意,您的图像是误导性的,因为字体大小随着按钮尺寸的增大而增加,除非您放大缩小时才会发生) – kleopatra 2013-04-04 09:42:15

回答

1

我只想说,我不喜欢GroupLayout,不过这只是我:d

enter image description hereenter image description here

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)) 
); 
+0

我知道这种方法可行。但我想使用参数,如x和y ... – user2049371 2013-04-04 09:33:49

+0

只需修改代码,以取代x/y和宽度/高度值 – MadProgrammer 2013-04-04 09:42:34

+0

_我不喜欢GroupLayout_我 - 但是,然后,它的设计用于建设者,而不是手工编码,所以它在传达后者方面做得很好:-) – kleopatra 2013-04-04 16:10:43

0
Try using GridBagLayout which is easier. 

private void initialize() { 
    getContentPane().setLayout(new GridBagLayout()); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(new Rectangle(0, 0, 250, 100)); 
    JButton p = new JButton("Click!!"); 
    add(p, new GridBagConstraints(0, 0, 1, 1, 0.5, 0.5, 
      GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, 
      new Insets(5, 5, 5, 5), 0, 0)); 
    setVisible(true); 
}