Tag: 焦点

如何在EditText提示后设置焦点到文本?

我感兴趣的是你可以在提示EditText之后将焦点设置为文本? 如果xml布局没有这样的属性? 在那时我仍然看起来像这样。 需要 编辑: Asok给出了最快和最有效的答案 我也发现了类似的方式: EditText.append( “60”); // 60或EditText中的文本

在不使用modal dialog的情况下阻止Swing输入

我想阻止对窗口的输入,但仍然可以移动它。 如果有一个modal dialog类型允许产生它的窗口移动,那么我会很高兴。 假设我有一个窗口打开另一个窗口。 然后第二个窗口打开一个modal dialog,它阻止输入到另外两个窗口(很好),但也锁定这两个窗口(为什么 – Amigas没有这样做:)?)。 我的问题是我可能需要在第一个窗口中以可视方式读取内容以供在对话框中使用,但这可能无法实现,因为第二个窗口已锁定到位,覆盖它。 我想,我几乎用玻璃窗解决了这个问题。 我将下面的类设置为我窗口的根窗格的玻璃窗格,然后当我想要阻止时调用setVisible(true),当我想解锁窗口时调用setVisible(false)。 锁定时,窗口会变灰以指示此情况。 鼠标输入被阻止,除了关闭窗口,现在很好 – 问题是我仍然可以在被阻止的窗口上的组件周围进行选项卡,如果我找到一个可编辑的窗口,我可以使用键盘编辑它,无论我的是什么空KeyListener。 有没有一种简单的方法可以防止玻璃窗格后面的组件获得焦点? 我希望它可以在“InputSink”类本身上完成。 我已经尝试添加自己的自私焦点遍历策略并在可见时请求焦点,但这没有任何效果。 我还尝试了一个我发现添加了FocusListener的示例,如果玻璃窗格可见,其focusLost方法会请求焦点,但这样做太过分了,因为窗口始终保持在前面。 有人知道这两个极端之间的解决方案吗? 这就是我所拥有的: import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.FocusTraversalPolicy; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.KeyAdapter; import java.awt.event.MouseAdapter; import javax.swing.JPanel; public class InputSink extends JPanel { public InputSink() { this(0.2f); //Default opacity. } public InputSink(float alpha) […]

窗口/舞台失去焦点时的事件

当JavaFX阶段失去焦点时,如何运行一段代码(或更确切地说:关闭舞台)? 例如,在Dropbox或Chrome中:如果单击托盘图标,则会打开一个小窗口。 如果您现在单击屏幕上的任意位置,窗口将关闭。 这正是我想在JavaFX应用程序中创建的行为。 我已经搜索了很长时间才找到解决方案,但找不到一个…… 所以,我正在寻找类似这样的东西: stage.addEventHandler(EventType.FOCUS_LOST, new EventHandler() { /*…*/ } ); 谢谢你帮助我!

使复合可以在SWT中集中

是否可以在SWT中创建可聚焦的复合材料? 我通过显示filter捕获所有键盘事件,但是当焦点在树或列表上时存在一些问题 – GTK +的默认操作是搜索控件的内容。 我想要做的是将SWT和AWT与可聚焦的AWT组件混合。 我设法让AWT小部件无法对焦,我添加了显示filter,使AWT组件接收键盘事件(但不是直接),即使它没有聚焦。 但是当一些SWT控件被聚焦时有几个问题 – 这就是为什么我想让复合可聚焦。 所以我的最后一个问题是:是否有可能使SWT复合成为可调焦的?

Swing JxMapViewer:专注于一个对象并设置相应的缩放级别

我试图将JxMapViewer集成到我的swing应用程序中。 我在地图上画了两条路之间的一条线。 现在我希望实现如下function: 无论我在地图上的哪个位置,无论设置任何缩放级别,每当我点击按钮(或某个外部事件)时,焦点都应该移动到我绘制的线条(即间接在两个航点上) 其次,应设置缩放级别,使得包含这两个航点的地图部分应该是可见的。 我看到我们在JxMApViewer类中有getViewportBounds方法。 同样,我们没有setViewportBounds 。 在这种情况下,我们可以计算出一个包含这两个航点并设置它的矩形。 任何提示将不胜感激 我将现有的calculateZoomFrom方法修改为: int zoom = mainMap.getZoom(); Rectangle2D inner = generateBoundedRectangleForLine(positionSet, mainMap.getZoom()); int count = 0; Rectangle outer = mainMap.getViewportBounds(); while(!outer.contains(inner) || (outer.contains(inner) && !(inner.getHeight() >= mainMap.getHeight() – 50))) { Point2D center = new Point2D.Double( inner.getX() + inner.getWidth()/2, inner.getY() + inner.getHeight()/2); GeoPosition px = mainMap.getTileFactory().pixelToGeo(center,zoom); mainMap.setCenterPosition(px); count++; […]

焦点所有者临时更改为null

我对Swing开发很新,希望我的问题不是一个愚蠢的问题。 我有一个以下问题。 我正在使用KeyboardFocusManager跟踪焦点,监听属性permanentFocusOwner变化。 但是当焦点从一个控件变为另一个控件时,我将permanentFocusOwner属性的中间更改为null 。 当焦点位于其中一个面板或其子面板内时,我当前的UI逻辑正在对控件进行一些更改。 但是,获得中间null会打破这种逻辑。 我在谷歌搜索有关此问题的信息,没有发现任何相关信息。 问题是,这种行为是否是设计的,以及是否有某种方法可以解决中间空值。 这是复制上述行为的最小应用程序: import java.awt.*; import java.beans.*; import javax.swing.*; public class FocusNullTest extends JFrame { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { FocusNullTest self = new FocusNullTest(); self.setVisible(true); } }); } public FocusNullTest() { setSize(150, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = getContentPane(); contentPane.setLayout(new […]

TableVew – 抛出KeyEvent时编辑单元格

我在TableView上有一个侦听键盘事件的事件监听器。 // Add event listener to table table.setOnKeyTyped(event -> { TablePosition focusedCell = table.getFocusModel().getFocusedCell(); if (focusedCell != null) { table.getItems().get(focusedCell.getRow()).set(event.getCharacter()); table.edit(focusedCell.getRow(), focusedCell.getTableColumn()); } }); 当用户单击enter或将焦点更改为另一个单元格时,我在使用新数据更新单元格时遇到问题。 单击“输入”或更改焦点时,单元格将变为空白。 我不知道为什么。 如何保存数据并使用新数据更新单元格。 // Here is the full code. import javafx.application.Application; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.ContentDisplay; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TablePosition; import javafx.scene.control.TableView; import […]

在setEnabled(true)之后,JButton不会立即获得焦点

我正在尝试创建一个直观的用户界面,用户可以在其中输入数值到JTextFields ,使用TAB键前进,最后激活按钮开始处理输入。 在开始时,该按钮被禁用,只有在将所有数据输入文本字段时才应启用该按钮。 我使用javax.swing.InputVerifier来限制只输入最多4位小数的正数,并且工作正常。 有3个可聚焦对象,两个文本字段和按钮。 在文本字段中键入(有效)数字后按TAB键,如果所有文本字段都包含有效输入,则启用该按钮。 这也很好。 问题是: 在第一个文本字段已包含有效数据并按下TAB后 ,将有效数据键入第二个文本字段后, 该按钮无法获得焦点 。 相反,焦点被转移到行中的下一个可聚焦对象,该行是(再次)第一个文本字段。 我尝试使用两种不同的方法: 按钮的enabled属性通过覆盖focusLost()方法内的FocusListener更改 按钮的enabled属性在overriden shouldYieldFocus()方法中更改 在这两种情况下,焦点在启用按钮后立即跳过按钮 。 但是,如果我们继续使用TAB和SHIFT + TAB键更改焦点,则按钮会在第二个文本字段后立即获得焦点。 在我看来,在启用按钮之前已经预先确定了opposite组件,因此即使在启用按钮后按钮也不会获得焦点。 我甚至试图在启用按钮后使用requestFocusInWindow()强制按钮获得焦点,但是这也没有用,所以问题是如何强制 LayoutFocusTraversalPolicy 重新评估布局,以便它可以立即考虑到新的介绍按钮是在禁用之前? 以下是我尝试的两种方法的代码: 按钮的enabled属性通过focusLost()方法中的FocusListener更改: package verifiertest; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import javax.swing.text.JTextComponent; import javax.swing.UIManager; import java.awt.GridLayout; import java.awt.Toolkit; import java.math.BigDecimal; import […]

这是在Java中将FocusListener添加到JTextFields的正确方法吗?

我在Java应用程序中有数百个JTextFields ,我想在所有这些上添加FocusListener来设置文本的水平对齐并在每个文本字段上添加FocusListener 。 所以,我做了这个方法,它的工作很棒。 但我只是想知道这种方法是否正确或有什么不对,或者我反对某种OOP规则? 这是代码 public void CreateFocusListenerForFields(JTextField txt) { txt.setHorizontalAlignment(JTextField.RIGHT); txt.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent e) { } @Override public void focusLost(FocusEvent e) { if(!NumberUtils.isNumber(txt.getText())) { txt.setBackground(new Color(254,157,157)); txt.requestFocus(); } else { txt.setBackground(Color.white); } } }); } 并在我的文本字段上应用此方法 CreateFocusListenerForFields(MyTextField); 现在,当我运行代码时,它很有效,只是想知道这是否正确,如果没有那么当你必须在数百个字段上设置对齐和focuslistener时,另一种方法是什么? 谢谢你的好意见。

重点组件参考

我正在研究一个简单的基于java swing的应用程序。 如何获取和设置表单当前聚焦的textfield / textarea的文本? 我知道如何确定哪个组件具有焦点,但我无法弄清楚如何获取组件的选定文本。 我使用getFocusOwner()但它返回一个Component,因此不实现方法getSelectedText()。 我是否需要进行类型转换?