2013-04-04 77 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); 
}