2016-06-09 98 views
2

我將如何去寫重疊for循環穿過JFrames列表迭代,並確保非是在屏幕上觸摸海誓山盟?檢查活躍JFrames

僞什麼,我試圖做的是:

for(JFrame f : frameList) 
{ 
if(f.isTouchingOtherFramesInFrameList()) 
f.setLocation(shift elsewhere) 
} 

謝謝!

//側面說明,我很清楚多JFrames氣餒。

回答

1

爲了測試如果兩個JFrames相互重疊,您可以使用

jframe1.getBounds().intersects(jframe2.getBounds()); 

找到一個新的,合適的位置是一個棘手的問題。這是不可能的,但如果可能的話,你需要一些方法來確定什麼樣的理想場所移動到會

2

可以判斷兩個JFrames通過檢查重疊,如果它們的邊界相交。下面是一個簡單的例子:

import javax.swing.*; 
import java.awt.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Example { 

    public static void main(final String[] args) { 

     JFrame jFrame1 = new JFrame(); 
     jFrame1.setMinimumSize(new Dimension(200, 200)); 
     jFrame1.setBounds(0, 0, 200, 200); 
     jFrame1.setTitle("JFrame 1"); 
     jFrame1.setVisible(true); 

     JFrame jFrame2 = new JFrame(); 
     jFrame2.setMinimumSize(new Dimension(200, 200)); 
     jFrame2.setBounds(100, 100, 200, 200); 
     jFrame2.setTitle("JFrame 2"); 
     jFrame2.setVisible(true); 

     JFrame jFrame3 = new JFrame(); 
     jFrame3.setMinimumSize(new Dimension(200, 200)); 
     jFrame3.setBounds(400, 400, 200, 200); 
     jFrame3.setTitle("JFrame 3"); 
     jFrame3.setVisible(true); 

     List<JFrame> jFrames = new ArrayList<>(3); 
     jFrames.add(jFrame1); 
     jFrames.add(jFrame2); 
     jFrames.add(jFrame3); 

     for(int i = 0; i < jFrames.size(); i ++) { 
      for(int j = 0; j < jFrames.size(); j ++) { 
       if(i != j && jFrames.get(i).getBounds().intersects(jFrames.get(j).getBounds())) { 
        System.out.println(jFrames.get(i).getTitle() + " overlaps!"); 
       } 
      } 
     } 
    } 
} 

輸出:

JFrame 1 overlaps! 
JFrame 2 overlaps! 
+0

如何輕鬆地確定是否有在屏幕上自由空間將窗口移動到任何線索? –