首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFrame getLocation和setLocation对系统边界的处理方式不同

JFrame getLocation和setLocation对系统边界的处理方式不同
EN

Stack Overflow用户
提问于 2014-04-15 03:47:51
回答 1查看 2.2K关注 0票数 2

我正在创建一个多用户Swing GUI应用程序,并希望用户的窗口位置和大小设置在用户注销和返回时保持不变。当用户注销并将其保存到文件中时,我目前正在使用父getLocation()getSize()方法获取窗口位置和大小,然后当用户重新登录时,我将返回这些值,并使用setLocation()setSize()设置窗口大小和位置。

我遇到的问题是,getLocation()getSize()似乎正在从系统边框中减去(例如,如果我将窗口放在左上角getLocation返回(1,54)而不是(0,0)),但setLocation()setSize()没有。结果是,每次我登出并重新登录时,窗口看起来都有点偏移,比关闭时稍微小一些。

有人知道为什么会发生这种事吗?或者我怎样才能避开它?我是否应该使用其他方法来获取和设置窗口位置和大小?

我正在Ubuntu12.04上运行java 1.7.0_45,如果这有帮助的话。

谢谢!

编辑:

下面的示例复制了我所看到的问题:

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;


public class JFrameTest
{
  private JFrame frame; 
  private JButton button;

  private Point lastLocation;
  private Dimension lastSize;

  private void run()
  {
    button = new JButton("Test");
    button.addActionListener(listener);

    lastLocation = new Point(0, 0);
    lastSize = new Dimension(200, 200);

    initFrame();
  }

  private void initFrame()
  {
    frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    frame.getContentPane().add(button);

    frame.setLocation(lastLocation);
    frame.setPreferredSize(lastSize);

    frame.pack();
    frame.setVisible(true);
  }

  private ActionListener listener = new ActionListener()
  {
    @Override
    public void actionPerformed(ActionEvent e)
    {
      if (e.getSource() == button)
      {
        lastLocation = frame.getLocationOnScreen();
        lastSize = frame.getSize();

        frame.dispose();

        initFrame();
      }
    }
  };

  public static void main(String[] args)
  {
    EventQueue.invokeLater(new Runnable() {
      public void run()
      {
        new JFrameTest().run();
      }
    });
  }
}

另外,当我使用getLocationOnScreen()而不是getLocation()时,我也看到了同样的问题。

EN

回答 1

Stack Overflow用户

发布于 2014-04-15 03:54:41

您可以使用getLocationOnScreen()

以指定该组件在屏幕坐标空间中左上角的点的形式获取此组件的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23074312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档