Java中两个JFrame窗口的切换问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中两个JFrame窗口的切换问题相关的知识,希望对你有一定的参考价值。
我做了两个JFrame界面,这两个界面分别有一个JButton,如何通过单击JButton实现这两个窗口的相互切换,而不产生新窗口。
参考技术A 有个setVisible(boolean)方法,设置窗体的可见度,false则隐藏,true显示出来,不回创建新窗口追问这方法不行,我试了的,因为是两个类,另外一个是调用不了的
追答你把这两个窗口的对象保存起来。这样就可以引用其他窗口
追问你能给我一个具体的代码吗?
本回答被提问者采纳 参考技术B 先new一个新的然后在dispose();假说我要JF0跳转到JF1,举个例子:JFrame JF0 = new JFrame();JFrame JF1 = new JFrame();
JF1.setVisible(true);
JF0.dispose();
如果你用setVisible(false);来取代dispose();的话,那实现出来的只是假跳转,dispose();是销毁这个窗口,setVisible(false);只是设定这个窗口不可见,但后台还可以看见有这个窗口并还在运行 参考技术C 你可以考虑把这两个JFrame写在一个类里面,分别new两个新的,而不用非得让新建的类继承于JFrame
并排的两个 JFrame
【中文标题】并排的两个 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);
【讨论】:
以上是关于Java中两个JFrame窗口的切换问题的主要内容,如果未能解决你的问题,请参考以下文章