2017-07-12 2 views
0

Ich erstelle eine Legendenansicht und innerhalb der Shell soll ein Rechteck gefolgt von einer Beschriftung, die die Farbe beschreibt. Ich konnte die Ansicht mit nur einem normalen Composite arbeiten lassen, aber die Legende geht über den Bildschirm hinaus und es ist unmöglich, das Fenster zu vergrößern, ohne das Fenster größer zu machen. Ich versuche, eine scrolledComposite-Ansicht für meine Shell zu verwenden, aber wenn ich das Programm ausführe, erscheint nichts.Wie der Inhalt in einem ScrolledComposite angezeigt wird

public void createPartControl(Composite parent) 
{ 
    display = parent.getDisplay(); 
    parent.setLayout(new FillLayout()); 
    sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); 

    LegendView.composite = new Composite(sc, SWT.NONE); 
    RowLayout layout = new RowLayout(); 
    layout.wrap = true; 
    layout.spacing = 5; 
    composite.setLayout(layout); 

} 

public static void addRectangle(String legendMessage) 
{ 
    final String propId = legendMessage; 
    final String[] s = propId.split(","); 
    if (display != null) 
    { 
    display.syncExec(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      // Creating the color using the RBG values 
      final Color color = 
       new Color(display, Integer.parseInt(s[0]), Integer.parseInt(s[1]), Integer.parseInt(s[2])); 
      // Creating a canvas for which the rectangle can be drawn on 
      Canvas canvas = new Canvas(composite, SWT.NONE); 
      // Maybe set the bounds of the canvas 
      canvas.addPaintListener(new PaintListener() 
      { 
       public void paintControl(PaintEvent e) 
       { 
       e.gc.drawRectangle(1, 1, 50, 60); 
       e.gc.setBackground(color); 
       e.gc.fillRectangle(2, 2, 49, 59); 
       } 
      }); 
      // Disposing the color after it has been used 
      canvas.addDisposeListener(new DisposeListener() 
      { 
       public void widgetDisposed(DisposeEvent e) 
       { 
       color.dispose(); 
       } 
      }); 
      // Creating a label and setting the font 
      Label label = new Label(composite, SWT.NULL); 
      Font boldFont = new Font(label.getDisplay(), new FontData("Arial", 12, SWT.BOLD)); 
      label.setFont(boldFont); 

      label.setText(s[3]);    

      composite.redraw(); 
      composite.layout(true); 
      sc.setContent(composite); 
     } 
    }); 
    } 
} 

Ich rufe Rechteck in einer anderen Klasse an. Ich bin ziemlich neu in der Verwendung von SWT und nach dem Betrachten von Beispielen und Lesen der Dokumente für gescrollt Composite, das ist es, was ich interpretierte es als. Jede Hilfe wäre sehr willkommen.

Antwort

2

Sie haben dem ScrolledComposite nicht gesagt, wie man die Größe handhabt. Sie müssen entweder setSize oder setMinSize anrufen. Wahrscheinlich möchten Sie:

+0

Das hat funktioniert, aber wenn ich mein Fenster kleiner, werden die Leinwand und Beschriftungen zu verbergen, aber die Bildlaufleisten nicht angezeigt. Die einzige Zeit, in der sie erscheinen, ist, wenn ich das Fenster so klein mache und die Menge, die ich zum ersten Gegenstand in meiner Legende scrollen kann und die anderen sind verborgen. Gibt es eine Möglichkeit, dass der Composite bemerkt, dass ein Canvas oder ein Label unter den Schwellenwert gegangen ist und Bildlaufleisten anzeigt, ohne die spezifische Größe der Shell fest codieren zu müssen? – Justin

+0

Die minimale Größe ist das einzige, was Sie ScrolledComposite erzählen. Wenn Sie ein Layout wie GridLayout für das Komposit verwenden, haben Sie mehr Kontrolle über die von computeSize berechnete Größe. –

Verwandte Themen