并排的两个 JFrame

Posted

技术标签:

【中文标题】并排的两个 JFrame【英文标题】:Two JFrames side by side 【发布时间】:2013-01-13 09:27:11 【问题描述】:

是否可以设置两个不同的 JFrame 并并排显示?不使用 Internalframe、多个 Jpanels 等。

【问题讨论】:

看看JFrame-setLocation方法,结合设置边框大小,可以并排定位 澄清一下:您是指并排的两个应用程序窗口,还是并排的两个部分(在一个应用程序窗口中)? 并非一切可能都是明智的。好像你想要一个 JFrame 和两个 JPanel 并排。 @makciook 是的,可以按照你说的做。但是还有其他可能吗? 我真的会考虑@GilbertLeBlanc 的建议,尤其是考虑到The Use of Multiple JFrames, Good/Bad Practice? 中提供的答案。 【参考方案1】:

首先将您的框架放置在每个屏幕设备上。

frame1.setLocation(pointOnFirstScreen);
frame2.setLocation(pointOnSecondScreen);

工作示例:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class GuiApp1 
protected void twoscreen() 
Point p1 = null;
Point p2 = null;
for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment ().getScreenDevices()) 
    if (p1 == null) 
        p1 = gd.getDefaultConfiguration().getBounds().getLocation();
     else if (p2 == null) 
        p2 = gd.getDefaultConfiguration().getBounds().getLocation();
    

if (p2 == null) 
    p2 = p1;

createFrameAtLocation(p1);
createFrameAtLocation(p2);
 

 private void createFrameAtLocation(Point p) 
final JFrame frame = new JFrame();
frame.setTitle("Test frame on two screens");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
final JTextArea textareaA = new JTextArea(24, 80);
textareaA.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
panel.add(textareaA, BorderLayout.CENTER);
frame.setLocation(p);
frame.add(panel);
frame.pack();
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.setVisible(true);
 

public static void main(String[] args) 
SwingUtilities.invokeLater(new Runnable() 


    public void run() 
        new GuiApp1().twoscreen();
    
);
  


【讨论】:

【参考方案2】:

是的,如下;

JFrame leftFrame = new JFrame();

// get the top left point of the left frame
Point leftFrameLocation = leftFrame.getLocation();
// then make a new point with the same top (y) and add the width of the frame (x)
Point rightFrameLocation = new Point(
            leftFrameLocation.x + leftFrame.getWidth(),
            leftFrameLocation.y);

JFrame rightFrame = new JFrame();
rightFrame.setLocation(rightFrameLocation); // and that's the new location

【讨论】:

【参考方案3】:

是的,这是一个非常简单的例子;对于我自己的用途,我对非模态 JDialogs 做同样的事情。

    public static void main(String[] args) 
        JFrame frameL = new JFrame("Left Frame");
        frameL.setSize(400, 200); // this size arbitrary; set how you need.
        frameL.setLocationRelativeTo(null);
        frameL.setVisible(true);

        Point p = frameL.getLocationOnScreen();
        Dimension d = frameL.getSize();

        JFrame frameR = new JFrame("Right Frame");
        frameR.setSize(300, 160); // this size arbitrary; set how you need.
        frameR.setLocation((p.x + d.width), p.y);
        frameR.setVisible(true);

        while(frameL.isVisible()) 
            try 
                Thread.sleep(100);
             catch (InterruptedException e) 
                e.printStackTrace();
            
        
        System.exit(0);
    

【讨论】:

以上是关于并排的两个 JFrame的主要内容,如果未能解决你的问题,请参考以下文章

水平并排显示两个视频并导出为一个视频

Excel条件格式公式以并排比较两个表

并排制作两个小部件

如何在移动设备中并排放置两个绝对定位的div? [复制]

两个 div 并排(再次)[重复]

如何并排合并两个数据框?