2013-04-19 21 views
6

basıldığında bir düğmesinegörüntüler ve bir açılır menü açan bir ok benzeyen ve değil araç çubuğu-sadece kontrol bir standart SWT kontrolü var mı? onun metin olmaz değişim -SWT Düğme Açılır Kontrol

enter image description here

"düğmesi" alan gerçek bir düğme daha benzer şekilde hareket edeceğini hariç Bu bir açılan kutu denetimi benzer:

Böyle bir şey olurdu Seçiminize göre, tıklandığında depresif görünecek ve öğeler seçim yapmak yerine eylemler veya gezinme amaçları için kullanılacaktır. Aynı zamanda araç çubukları için mevcut bir kontrole benzer, ancak bunun yerine düzenli bir kompozit üzerinde kullanmam gerekiyor.

Bu, normal düğmeyi ve açılır menü kontrollerini kullanarak neredeyse yapılabilir - ancak, düğmedeki metnin yanındaki oku bu şekilde görüntüleyebileceğime inanmıyorum. Her neyse, bu tür bir kontrol oldukça yaygın gözüktüğü için, bu iki şeyi tek olarak kullanmanın standart bir yolu olacağını düşündüm.

cevap

1

Bu snippet, açıklanan bir widget'ı bir SWT araç çubuğunda nasıl kullanacağınızı gösterir. Düğme metnini item.setText() yöntemini kullanarak ayarlayabilirsiniz.

bence
8

, bu size bir düğmeye istiyorsanız Menu

üzerinde MenuItems oluşturma tarzı SWT.DROP_DOWN

  • ile Menu oluştur menü davranışı

    1. Alçalın olsun yapması gereken şey budur

      1. Bir tarzı SWT.ARROW | SWT.DOWN
      2. ile ton SelectionListener yılında SelectionListener
      3. eklemek tarzı SWT.POP_UP ile oluşturma Menü ve düğme yerde menüyü yerleştirin.

      // kod Maalesef

      public static void main(String[] args) { 
           Display display = new Display(); 
           final Shell shell = new Shell(display); 
           shell.setSize(300, 200); 
           shell.setText("Button Example"); 
           shell.setLayout(new RowLayout()); 
      
      
           /** 
           * 
           * Approach1 
           * 
           */ 
           final Composite btnCntrl = new Composite(shell, SWT.BORDER); 
           btnCntrl.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); 
           btnCntrl.setBackgroundMode(SWT.INHERIT_FORCE); 
           GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).spacing(0, 1).applyTo(btnCntrl); 
           CLabel lbl = new CLabel(btnCntrl, SWT.NONE); 
           lbl.setText("Animals"); 
           Button btn = new Button(btnCntrl, SWT.FLAT|SWT.ARROW|SWT.DOWN); 
           btn.setLayoutData(new GridData(GridData.FILL_VERTICAL)); 
      
           btn.addSelectionListener(new SelectionAdapter() { 
            @Override 
            public void widgetSelected(SelectionEvent e) { 
             super.widgetSelected(e); 
             Menu menu = new Menu(shell, SWT.POP_UP); 
      
             MenuItem item1 = new MenuItem(menu, SWT.PUSH); 
             item1.setText("Hare"); 
             MenuItem item2 = new MenuItem(menu, SWT.PUSH); 
             item2.setText("Fox"); 
             MenuItem item3 = new MenuItem(menu, SWT.PUSH); 
             item3.setText("Pony"); 
      
      
      
             Point loc = btnCntrl.getLocation(); 
             Rectangle rect = btnCntrl.getBounds(); 
      
             Point mLoc = new Point(loc.x-1, loc.y+rect.height); 
      
             menu.setLocation(shell.getDisplay().map(btnCntrl.getParent(), null, mLoc)); 
      
             menu.setVisible(true); 
            } 
           }); 
      
      
      
           /*** 
           * 
           * 
           * Approach 2 
           * 
           */ 
      
      
           final Composite btnCntrl2 = new Composite(shell, SWT.BORDER); 
           btnCntrl2.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); 
           btnCntrl2.setBackgroundMode(SWT.INHERIT_FORCE); 
           GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).spacing(0, 1).applyTo(btnCntrl2); 
           CLabel lbl2 = new CLabel(btnCntrl2, SWT.NONE); 
           lbl2.setText("Animals"); 
           Button btn2 = new Button(btnCntrl2, SWT.FLAT|SWT.ARROW|SWT.DOWN); 
           btn2.setLayoutData(new GridData(GridData.FILL_VERTICAL)); 
      
           btn2.addSelectionListener(new SelectionAdapter() { 
            @Override 
            public void widgetSelected(SelectionEvent e) { 
             super.widgetSelected(e); 
             Shell menu = (Shell) btnCntrl2.getData("subshell"); 
             if(menu != null && !menu.isDisposed()){ 
              menu.dispose(); 
             } 
             menu = new Shell(shell, SWT.NONE); 
             menu.setLayout(new FillLayout()); 
             Table table = new Table(menu, SWT.FULL_SELECTION); 
             table.addListener(SWT.MeasureItem, new Listener() { 
      
              @Override 
              public void handleEvent(Event event) { 
               event.height = 20; //TODO: determine later 
              } 
             }); 
      
             table.addListener(SWT.PaintItem, new Listener() { 
      
              @Override 
              public void handleEvent(Event event) { 
               Rectangle bounds = event.getBounds(); 
               event.gc.setBackground(event.display.getSystemColor(SWT.COLOR_BLUE)); 
               event.gc.drawLine(bounds.x, bounds.y+bounds.height-1, bounds.x+bounds.width, bounds.y+bounds.height-1); 
              } 
             }); 
             TableItem tableItem= new TableItem(table, SWT.NONE); 
             tableItem.setText(0, "Hare"); 
      
             TableItem tableItem2= new TableItem(table, SWT.NONE); 
             tableItem2.setText(0, "Pony"); 
      
             TableItem tableItem3= new TableItem(table, SWT.NONE); 
             tableItem3.setText(0, "Dog"); 
      
      
             Point loc = btnCntrl2.getLocation(); 
             Rectangle rect = btnCntrl2.getBounds(); 
      
             Point mLoc = new Point(loc.x, loc.y+rect.height); 
      
             menu.setLocation(shell.getDisplay().map(btnCntrl2.getParent(), null, mLoc)); 
             menu.pack(); 
             menu.setVisible(true); 
      
             btnCntrl2.setData("subshell", menu); 
      
            } 
           }); 
      
           display.addFilter(SWT.MouseDown, new Listener() { 
      
            @Override 
            public void handleEvent(Event event) { 
             Shell shell = (Shell) btnCntrl2.getData("subshell"); 
             if(shell != null && !shell.getBounds().contains(event.display.map((Control)event.widget, null, new Point(event.x, event.y)))){ 
              shell.dispose(); 
              btnCntrl2.setData("subshell", null); 
             } 
            } 
           }); 
      
           shell.open(); 
           while (!shell.isDisposed()) { 
            if (!display.readAndDispatch()) 
            display.sleep(); 
           } 
           display.dispose(); 
           } 
      
  • +0

    , ben aktif menüsü-veya araç çubuğu tabanlı kontrollerini kullanarak önlemek çalışıyorum. Normalde bir kompozit üzerinde çalışan bir şey kullanmaya çalışıyorum. –

    +0

    cevabımı –

    +0

    güncellemeden önce "ARROW | DOWN" denedim ve çok eksik görünüyor. Ne görebildiğimden ne metin ne de resim ile uyumlu değildir. –