2017-07-13 55 views
0

目前我所有的Java GUI應用程序都有SWT.SWT作爲它們的窗口類。我希望其中的一些鏈接爲菜單應用程序中的子窗口,例如Cairo-Dock。這是從wmctrl -lx輸出的第三列。SWT - 如何更改窗口類名稱? wm_class

我嘗試使用Display.setAppName()方法嘗試設置此名稱。 Display.setAppNamedisplay.SetAppname都不會將應用程序類別從SWT.SWT更改爲我要設置的類名稱。

當我使用小寫display.setAppName它產生在Eclipse IDE這樣的警告:

Description Resource Path Location Type 
The static method setAppName(String) from the type Display should be accessed in a static way WBTest.java /javaTools/src/javaTools line 31 Java Problem 

代碼示例:

package javaTools; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableItem; 
import org.eclipse.wb.swt.SWTResourceManager; 

public class WBTest { 
    private Table table; 

    /** 
    * Launch the application. 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      WBTest window = new WBTest(); 
      window.open(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Open the window. 
    */ 
    public void open() { 
     Display display = Display.getDefault(); 
     display.setAppName("myapplication"); 
     Shell shell = new Shell(); 
     shell.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK)); 
     shell.setSize(560, 426); 
     shell.setText("SWT Application"); 

     table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION); 
     table.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); 
     // table.setBounds(49, 21, 241, 158); 
     table.setHeaderVisible(true); 
     table.setLinesVisible(true); 

     TableItem row = new TableItem(table, SWT.NONE); 
     row.setText("This is a test."); 


     shell.open(); 
     // shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
    } 
} 

我的研究顯示瞭如何在做到這一點的Python ,它的工作原理是:

#!/usr/bin/python 
from gi.repository import Gtk 

win = Gtk.Window() 
win.connect("delete-event", Gtk.main_quit) 
win.set_wmclass ("Hello World", "Hello World") 
win.set_title ("Hello World") 
win.show_all() 
Gtk.main() 

我正在嘗試與SWT/Java做同樣的事情。 還有什麼我需要添加到此功能,使其工作,或有一個不同的功能,是專門設置應用程序的類名?

回答

0

我不知道是否刪除此問題或提供答案。自昨天以來我一直在努力,並且仍在嘗試很多變化。

最後一個作品。顯然,在宣佈Display之前,該行必須出現在代碼中。

這工作:

package javaTools; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableItem; 
import org.eclipse.wb.swt.SWTResourceManager; 

public class WBTest { 
    private Table table; 

    /** 
    * Launch the application. 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      WBTest window = new WBTest(); 
      window.open(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Open the window. 
    */ 
    public void open() { 
     Display.setAppName("myapplication"); 
     Display display = Display.getDefault(); 
     Display.setAppName("myapplication"); 
     Shell shell = new Shell(); 
     shell.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLACK)); 
     shell.setSize(560, 426); 
     shell.setText("SWT Application"); 

     table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION); 
     table.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); 
     // table.setBounds(49, 21, 241, 158); 
     table.setHeaderVisible(true); 
     table.setLinesVisible(true); 

     TableItem row = new TableItem(table, SWT.NONE); 
     row.setText("This is a test."); 


     shell.open(); 
     // shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
    } 
}