【问题标题】:How to set the location of a JWindow below the textfield when the frame is being drag?拖动框架时如何在文本字段下方设置 JWindow 的位置?
【发布时间】:2011-11-10 11:43:00
【问题描述】:

我正在制作一个自动完成项目(就像 Google 一样)。我的框架中有一个 jtextfield,每当我在该字段中键入内容时,文本字段下方都会出现一个 JWindow,并且该窗口来自另一个类。

现在的问题是,当我拖动框架时,如何让窗口始终显示在文本字段下方?

任何帮助将不胜感激......谢谢......

【问题讨论】:

  • 再次,究竟是什么问题?如果您正确编码了窗口的位置,它将在相对于 textField 的正确位置弹出,与框架的位置无关。或者你的意思是让它保持打开并卡住同时拖动?
  • 在拖动时保持打开并卡住
  • 感谢您的澄清 - 您知道它不是默认行为(f.i. 在谷歌中 - 下拉菜单在拖动时关闭)
  • 在 google 中,下拉菜单在拖动时关闭是什么意思?授予它在拖动时关闭。但在我的情况下,当我将应用程序拖动到不同的位置时,窗口仍保持在屏幕上的先前位置.即使我拖动我的框架,我怎样才能让它出现在我的文本字段所在的位置下方?

标签: java swing autocomplete intellij-idea


【解决方案1】:

对于在屏幕上手动设置Location,您必须从所需的JComponent 中定义private Point location;getLocation,不要忘记将Show Top-Level Container 的显示转换为invokeLater();

例如

public void showWindow() {   
    window.setVisible(false);
    location = myTextField.getLocationOnScreen();
    int x = location.x;
    int y = location.y;
    window.setLocation(x - 20, y - 20);
    Runnable doRun = new Runnable() {

         @Override
         public void run() {
             window.setVisible(true);
         }
    };
    SwingUtilities.invokeLater(doRun);
 }

【讨论】:

  • 我应该把这个放在哪里?这是来自 jwindow 还是我的文本字段在哪里?
  • @Mikel 将其放入 void(@see 编辑),然后您将只调用 voidMane,这对您来说是最简单的方法
【解决方案2】:

使用SwingUtilities.convertPointToScreen()/convertPointFromScreen() 传递JTextField's 位置并获取JWindow 在屏幕上的坐标。

【讨论】:

    【解决方案3】:

    如果我理解得很好,您正在尝试做一个 JTextfield,它会在用户输入一些文本时提出建议列表。

    我以前用过这个:http://www.java2s.com/Code/Java/Swing-Components/AutocompleteComboBox.htm

    它需要一些重构,但你的问题就是我所说的,它将帮助你更轻松(和优雅地)解决它!

    使用示例:

    Java2sAutoTextField textField = new Java2sAutoTextField(
       Arrays.asList(new String[] {"Value 1","Value 2"}));
    

    【讨论】:

      【解决方案4】:

      您不应为此使用 JWindow,而应使用 JComboBox 而不是 TextField。 JWindow 被设计为顶级窗口...

      【讨论】:

      • -是的,你说得对,但如果可能的话,我想用 JWindow 来试试。到目前为止,我唯一的问题是当我拖动框架时,JWindow 留在原来的位置。
      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多