Java 如何在swing中打开同一监视器上的一个帧和另一个帧?
我有一个框架,它可以导致另一个框架打开,比如说,按下按钮。我想让第二帧显示在与第一帧相同的屏幕上(在双监视器配置中) 怎么做 UPDDATEJava 如何在swing中打开同一监视器上的一个帧和另一个帧?,java,swing,multiple-monitors,Java,Swing,Multiple Monitors,我有一个框架,它可以导致另一个框架打开,比如说,按下按钮。我想让第二帧显示在与第一帧相同的屏幕上(在双监视器配置中) 怎么做 UPDDATE 从父级JFrame传递getGraphicsConfiguration()没有帮助,尽管它包含正确的screen字段。根据建议,将用户对框架位置的选择存储在java.util.Preferences或javax.jnlp.BasicService中。默认设置为setLocationByPlatform(),并在启动时恢复位置。另见 附录:对不起,你在说什么
从父级
JFrame
传递getGraphicsConfiguration()
没有帮助,尽管它包含正确的screen
字段。根据建议,将用户对框架位置的选择存储在java.util.Preferences
或javax.jnlp.BasicService
中。默认设置为setLocationByPlatform()
,并在启动时恢复位置。另见
附录:对不起,你在说什么
让用户决定窗口的放置位置。概括地说
setLocationByPlatform()
作为帧的默认首选位置根据建议,将用户对框架位置的选择存储在
java.util.Preferences
或javax.jnlp.BasicService
中。默认设置为setLocationByPlatform()
,并在启动时恢复位置。另见
附录:对不起,你在说什么
让用户决定窗口的放置位置。概括地说
setLocationByPlatform()
作为帧的默认首选位置根据建议,将用户对框架位置的选择存储在
java.util.Preferences
或javax.jnlp.BasicService
中。默认设置为setLocationByPlatform()
,并在启动时恢复位置。另见
附录:对不起,你在说什么
让用户决定窗口的放置位置。概括地说
setLocationByPlatform()
作为帧的默认首选位置根据建议,将用户对框架位置的选择存储在
java.util.Preferences
或javax.jnlp.BasicService
中。默认设置为setLocationByPlatform()
,并在启动时恢复位置。另见
附录:对不起,你在说什么
让用户决定窗口的放置位置。概括地说
setLocationByPlatform()
作为帧的默认首选位置有很多方法可以做到这一点,但我会坚持我做的一个。以下是我使用MVC模型所做的: 由于您有多个视图(框架),您可能需要使视图类属性非静态,并为内部框架(innerView)添加一个字段。这样,您可以创建一个视图并修改其组件,然后将其设置为另一个视图的内部视图。这也意味着向视图中添加组件最有可能在主程序类中完成,而不是在视图类本身中完成。这可能会有点忙,但仍然可行
- 我在视图类中添加了一个
字段,可以在其中存储我要添加的组件。然后,我会用一个单独的方法将它们添加到面板中并对其进行更新List
- 由于我对所有视图使用相同的控制器,因此我还添加了一个
,以存储我创建的所有视图,然后设置我当前正在操作的视图列表
- 接下来,我将构造两个具有固定大小的视图类(第一个和第二个)及其组件。我会将第一个的内部视图设置为第二个。请注意,第一个按钮有一次单击将显示第二个按钮
- 最后,我为按钮制作了一个动作侦听器。单击按钮后,此侦听器将使第二个可见。它还将设置Second作为控制器类中的当前视图,以防您也想在那里创建按钮。按钮本身是在主程序类中创建的
如果您需要更多的说明或示例,请告诉我。有很多方法可以做到这一点,但我会坚持使用我曾经使用过的方法。以下是我使用MVC模型所做的: 由于您有多个视图(框架),您可能需要使视图类属性非静态,并为内部框架(innerView)添加一个字段。这样,您可以创建一个视图并修改其组件,然后将其设置为另一个视图的内部视图。这也意味着向视图中添加组件最有可能在主程序类中完成,而不是在视图类本身中完成。这可能会有点忙,但仍然可行
- 我在视图类中添加了一个
字段,可以在其中存储我要添加的组件。然后,我会用一个单独的方法将它们添加到面板中并对其进行更新List
- 由于我对所有视图使用相同的控制器,因此我还添加了一个
,以存储我创建的所有视图,然后设置我当前正在操作的视图列表
- 接下来,我将构造两个视图类(第一个和第二个),具有固定的大小和
public static void showOnScreen(Window frame) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gd = ge.getScreenDevices(); final GraphicsDevice frameDevice = frame.getParent().getGraphicsConfiguration().getDevice(); for (GraphicsDevice graphicsDevice : gd) { if (frameDevice.equals(graphicsDevice) || frameDevice.getIDstring().equals(graphicsDevice.getIDstring())) { final Rectangle monitorBounds = graphicsDevice.getDefaultConfiguration().getBounds(); final int x = monitorBounds.x + (monitorBounds.width - frame.getWidth()) /2; final int y = monitorBounds.y + (monitorBounds.height - frame.getHeight()) / 2; frame.setLocation(x, y); } } }
newPanel.setLocationRelativeTo(parentPanel);