- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要添加右键JPopupMenu
到世界风显示。世界风显示位于 JPanel
。我几乎只是复制了ApplicationTemplate.AppPanel
的成员变量和方法。 World Wind 示例中的内部类 ApplicationTemplate
类,将其粘贴到我需要 WW 显示的 GUI 中,并更改 this.add(component)
复制代码中对 myJPanel.add(component)
的引用.
除了缺少弹出菜单之外,它的效果很好;我的应用程序中嵌入了一个 World Wind 显示,并通过应用程序的对话框控制它。
添加JPopupMenu
后前往世界风展JPanel
,似乎根本没有表现出来。我右键单击,什么也没有弹出。我不认为这是隐藏菜单的重量级与轻量级 Java 组件问题,因为我可以将菜单附加到世界风显示上方的组件(WWD 位于 BorderLayout
中心,其他组件位于其北部)并且菜单会很高兴地进入世界风显示的空间,而不会被它隐藏。为了安全起见,我设置了JPopupMenu
的setLightWeightPopupEnabled(false)
在主类的静态初始化器顶部我做了 JPopupMenu.setDefaultLightWeightPopupEnabled(false)
我用 MouseListener
进行了测试附于JPanel
包含世界风显示,并且没有 MouseListener
事件正在触发。所以我最好的猜测是我不应该添加 JPopupMenu
到JPanel
但应该将其添加到 wwd 对象的某些特定子组件中。 wwd 对象本身似乎没有添加弹出菜单的方法,并且我在 wwd 的方法中没有看到类似“getGLCanvas”的内容。如果我的思路是正确的,菜单应该添加到哪个组件,以及如何访问该组件?
所以我的问题非常简单,或者看起来是这样:我如何获得 JPopupMenu
到世界风显示屏上?
其次,这个问题也同样要求得到 MouseListener
在显示屏上,但我认为这个问题的答案将超出获得 JPopupMenu
的答案。在显示屏上。
下面是我插入的世界风模板代码,以及我对其的修改。其他地方的另一个类使用 getComponent()
添加JPanel
包含世界风显示到我的应用程序的用户界面。我保留了默认的“世界风”内容,并对其进行了注释,以防万一有什么重大意义。通过图层名称的 String[] 循环只是我轻松仅显示 map 和单位比例的一种方法。 JPopupMenu
代码位于构造函数的中间。对困惑的代码表示歉意,但我认为您应该按原样查看它以获得最佳帮助。
class MyClass
{
protected JComponent component;
public JComponent getComponent() { return component; }
protected WorldWindow wwd;
protected StatusBar statusBar;
protected ToolTipController toolTipController;
protected HighlightController highlightController;
MyClass()
{
boolean includeStatusBar = false;
component = new JPanel(new BorderLayout());
this.wwd = this.createWorldWindow();
((Component) this.wwd).setPreferredSize(new Dimension(200,200));//canvasSize);
// Create the default model as described in the current worldwind properties.
Model m = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
this.wwd.setModel(m);
// Setup a select listener for the worldmap click-and-go feature
// this.wwd.addSelectListener(new ClickAndGoSelectListener(this.getWwd(), WorldMapLayer.class));
component.add((Component) this.wwd, BorderLayout.CENTER);
if (includeStatusBar)
{
this.statusBar = new StatusBar();
component.add(statusBar, BorderLayout.PAGE_END);
this.statusBar.setEventSource(wwd);
}
// Add controllers to manage highlighting and tool tips.
// this.toolTipController = new ToolTipController(this.getWwd(), AVKey.DISPLAY_NAME, null);
// this.highlightController = new HighlightController(this.getWwd(), SelectEvent.ROLLOVER);
java.util.List<String> desiredLayers = Arrays.asList(
new String[] { "Blue Marble May 2004", /*"i-cubed Landsat",*/ "Scale bar"
});
for(Layer layer : getWwd().getModel().getLayers())
{
if(desiredLayers.contains( layer.getName() ))
{
System.out.println("INCLUDE " + layer.getName());
layer.setEnabled(true);
}
else
{
System.out.println("EXCLUDE " + layer.getName());
layer.setEnabled(false);
}
}
JMenu menuZoom = new JMenu("Zoom");
JMenuItem menuZoom_1028 = new JMenuItem("1028");
menuZoom.add(menuZoom_1028);
JMenuItem menuZoom_512 = new JMenuItem("512");
menuZoom.add(menuZoom_512);
JMenuItem menuZoom_256 = new JMenuItem("256");
menuZoom.add(menuZoom_256);
JMenuItem menuZoom_128 = new JMenuItem("128");
menuZoom.add(menuZoom_128);
JMenuItem menuZoom_64 = new JMenuItem("64");
menuZoom.add(menuZoom_64);
JMenuItem menuZoom_32 = new JMenuItem("32");
menuZoom.add(menuZoom_32);
JPopupMenu rclickMenu = new JPopupMenu();
rclickMenu.add(menuZoom);
component.setComponentPopupMenu(rclickMenu);
menuZoom.getPopupMenu().setLightWeightPopupEnabled(false);
component.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println("mouseClicked");
}
@Override
public void mousePressed(MouseEvent e)
{
System.out.println("mousePressed");
}
@Override
public void mouseReleased(MouseEvent e)
{
System.out.println("mouseReleased");
}
@Override
public void mouseEntered(MouseEvent e)
{
System.out.println("mouseEntered");
}
@Override
public void mouseExited(MouseEvent e)
{
System.out.println("mouseExited");
}
});
}
protected WorldWindow createWorldWindow()
{
return new WorldWindowGLCanvas();
}
public WorldWindow getWwd()
{
return wwd;
}
public StatusBar getStatusBar()
{
return statusBar;
}
}
最佳答案
经过一番研究,我终于找到了解决方法。
首先,我将解决有关从 World Wind wwd 对象获取 GLPanel
的愚蠢子问题:wwd 对象是一个 GLPanel
>。嗯,从技术上讲,WorldWindow
是一个接口(interface),但在我从中绘图的 World Wind ApplicationTemplate
应用程序中,WorldWindow
的实现> 是一个扩展GLPanel
的类。我有一段时间没有注意到这一点。
如问题所述,应用于包含世界风显示的 JPanel
的鼠标监听器不会触发我在 map 上的鼠标操作,并且世界风显示没有添加鼠标监听器的方法对自己。我终于意识到世界窗口有一个 getInputHandler() ,它返回一个可以添加鼠标监听器的对象。所以我必须做 wwd.getInputHandler().addMouseListener(myMouseAdapter);
正如我所相信的,JPopupMenu
并没有被世界风显示隐藏;它只是没有被触发弹出。通过上述针对鼠标监听器的修复,我通过自己打开弹出窗口而不是依赖 Swing 的内置右键单击 JPopupMenu
支持来解决此问题。我通过从鼠标监听器中调用 jPopupMenu.show(component, event.getX(), event.getY());
来完成此操作。
这是我用来弹出菜单的代码(在世界风的初始化代码中):
wwd.getInputHandler().addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent event)
{
// right-click context-menu
if(event.getButton() == MouseEvent.BUTTON3)
{
// component is my JPanel which contains the WorldWindow
rclickMenu.show(component, event.getX(), event.getY());
}
}
});
我还添加了一些我需要的东西,如果有用的话我会提到。我添加了一项检查以确保右键单击的点专门位于世界地图上,并且我还想稍后知道右键单击的位置,因为某些菜单项用于与右键单击的内容进行交互。
添加这些内容后,代码如下所示:
wwd.getInputHandler().addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent event)
{
// right-click context-menu
if(event.getButton() == MouseEvent.BUTTON3)
{
Position p = wwd.getCurrentPosition();
// abort if not on-map
if(p == null) return;
// need later to know what was right-clicked on
mPositionAtRightClickMoment = wwd.getCurrentPosition();
rclickMenu.show(component, event.getX(), event.getY());
}
}
});
关于java - 在世界风显示中获取 JPopupMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844281/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!