Tag: 叠加

TYPE_PHONE覆盖视图不允许子GridView捕获onItemClick事件

我的应用程序绘制了一个叠加层,它有一个GridView作为它的孩子。 覆盖onTouch的onTouch事件正在捕获所有点击,并且没有任何内容传递给GridView的onItemClick事件。 创建它的代码是: LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); TaskBarView = inflater.inflate(R.layout.view_overlay, null); TaskBarViewParams = new WindowManager.LayoutParams(TaskBarInactiveWidth, TaskBarHeight, LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); TaskBarViewParams.gravity = Gravity.LEFT | Gravity.TOP; windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); windowManager.addView(TaskBarView, TaskBarViewParams); 注意:此问题仅在API级别16及更高级别上显示 。 GridView捕获它的onItemClick ,并且叠加正确捕获它的onTouch ,因为它应该低于API级别16。 我错过了一面旗帜吗?

输入文本时叠加Swing文本标签

我程序中的各种表单使用JTables,我已经能够使用Key Listener在用户输入时选择一行。 这很好用,但我想向用户提供一些反馈,以显示正在输入的文本。 我尝试过创建框架/标签,但无法正确显示它们。 我的基本想法是 – 创建框架(如果它尚不存在),创建标签并设置文本。 例如: private void showSearchLabel(String search) { if (null == searchTextFrame) { searchTextFrame = new JFrame(“searchTextFrame”); searchTextFrame.setBackground(new Color(0, 0, 0, 0)); searchTextFrame.setUndecorated(true); searchTextFrame.setAlwaysOnTop(true); searchTextFrame.getContentPane().setLayout(new java.awt.BorderLayout()); searchTextLabel = new JLabel(); searchTextFrame.getContentPane().add(searchTextLabel); searchTextFrame.pack(); searchTextFrame.setVisible(true); } searchTextLabel.setText(search); } showSearchLabel由Key Listener调用,它将最近的按键添加到搜索字符串中。 退格键清除字符串(并删除框架/标签)。 Enter键选择表中的项目,还应删除框架/标签。 我错过了什么? 编辑:澄清 – 使用上面的代码,什么都没有显示。 如果我在创建标签时设置文本,则第一个字符是可见的(在该点可以预期,用户只键入一个字符)。 在此之后调用.setText(搜索) ,文本不会更新。 注意 – 这在屏幕的顶部/左上角是可见的,这不是我想要的地方(理想情况下,它希望它在JTable中显示)。

Java:如何在ScrollPane Viewport上绘制非滚动叠加层?

我想使用ScrollPane在其视口中显示图像,并在图像上还有一个网格(或框,或任何其他类型的注册/位置标记)覆盖。 滚动时我需要叠加层保持固定(意味着图像似乎在叠加层下“移动”)。 我将以固定速率滚动视口中的视图以提供平滑运动,并且叠加层将提供对视口内某个位置的引用。 从概念上讲,考虑在视口中滚动的大地图,以及具有不移动的矩形(相对于视口本身)的视口,该矩形标记可以基于某些用户动作放大的区域。 我假设(但尚未确认)ScrollPane实现有效地处理View的渲染(从后备存储,不必为每个新的部分曝光重新绘制整个View(甚至ViewPort)),因此不希望覆盖paint()方法。 我看过LayerPane,虽然没有掌握它,但似乎这是一种蛮力的方法。 ScrollPane是SplitPane的一个组件,将被移动/resize。 我希望我必须使用绝对定位手动维护ViewPort和LayerPane之间的正确关系。 我远不是GUI设计和实现方面的专家,我确​​信我缺少从有经验的人会知道的明显到模糊和优雅的可能性。 我愿意接受任何建议,而不仅仅是我开始的道路。 我是否(我可以)在我的SplitPane中添加JPanel作为一个组件,然后在LayerPane的不同图层上添加一个LayerPane到包含我的ScrollPane和覆盖(另一个​​JPanel)的那个? ScrollPane中是否有function直接支持此function? 我查看了Java Swing教程和API文档,但还没有看到任何内容。 谢谢。 更新: 感谢您的链接,trashgod。 这比我想象的要容易得多。 不需要LayerPane,GlassPane,基于xor的合成……我不知道为什么我没有尝试重写JViewport.paint()来绘制我的叠加层 – 但是使用下面的代码我validation了概念将给我我正在寻找的东西。 只需使用JViewport的子类,它就可以完成我想要的操作(在这种情况下,当图像在下面滚动时,在Viewport的中心覆盖一个矩形)。 我不是GUI专家,Java API非常广泛; 我不知道你们怎么把这一切都放在脑海里 – 但是谢谢! class MyViewport extends JViewport { @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; g2.setPaint(Color.BLACK); g2.drawRect(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2); } }