gpt4 book ai didi

java - 在 Java SWT 中获取菜单控件的大小

转载 作者:行者123 更新时间:2023-11-30 11:53:55 25 4
gpt4 key购买 nike

如何在 Java SWT shell 窗口中获取菜单栏控件的高度?

似乎不同的操作系统对shell窗口顶部的菜单栏有不同的高度。所以如果我能得到菜单栏的确切高度就太好了。菜单 API 没有对应的 getSize()。

最佳答案

可以使用org.eclipse.swt.widgets.Menu/*public*/Rectangle getBounds()。但问题是该方法具有默认可访问性。它的签名表明它在某个史前时期曾经是public。无论如何,有很多方法可以解决您的问题:

  1. 外壳的高度减去标题区的高度客户区的高度。问题是如何找到标题区域的高度?
  2. 第二种方式和第一种方式一样曲折。在 java Reflection 的帮助下使用上述 API。有关更多详细信息,请参见下面的代码。特别是 static int getMenuHeight(Menu parent) 方法。

注意: parent Menu 参数应该是最顶层可见菜单实例。因为,在某些操作系统上,隐藏的子菜单是即时创建的。此外,该 API 在 Vista 机器上进行了测试,该机器运行带有 SUN JDK 1.6_b18 的 eclipse 3.62。

>>代码:

import java.lang.reflect.Method;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

public class MenuTest {

public static void main (String [] args)
{
Display display = new Display ();
final Shell shell = new Shell (display);
final Menu bar = new Menu (shell, SWT.BAR);
shell.setMenuBar (bar);

final Composite c = new Composite(shell, SWT.NONE);
c.setLayout(new GridLayout());
c.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,true));

MenuItem fileItem = new MenuItem (bar, SWT.CASCADE);
fileItem.setText ("&File");
Menu submenu = new Menu (shell, SWT.DROP_DOWN);
fileItem.setMenu (submenu);
MenuItem item = new MenuItem (submenu, SWT.PUSH);
item.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
System.out.println(shell.getSize().y - shell.getClientArea().height);
System.out.println(getMenuHeight(bar));
}
});


item.setText ("Select &All\tCtrl+A");
item.setAccelerator (SWT.MOD1 + 'A');
shell.setSize (200, 200);
shell.open ();
while (!shell.isDisposed()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}

static int getMenuHeight(Menu parent)
{
try {
Method m = Menu.class.getDeclaredMethod("getBounds", null);
m.setAccessible(true);
Rectangle r = (Rectangle) m.invoke(parent, null);
return r.height;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
}

关于java - 在 Java SWT 中获取菜单控件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com