2010-10-01 3 views
0

Я хотел бы иметь некоторые элементы управления в приложении - Button s и Label s - вертикально ориентированный -. Однако я не мог найти возможности для этого. Даже непубличный метод setOrientation решает только ориентацию слева направо. Возможно ли это, если вы не внесете заказ в личный кабинет Button или связаны с кодом Canvas?Возможно ли иметь вертикальные элементы управления SWT?

+1

Теперь вы можете сделать это. Взгляните на http://stackoverflow.com/q/8091920/796559 –

+0

@Tonny Спасибо, это резонный обход – kostja

ответ

2

Насколько я знаю, вертикальная ориентация кнопки и метки невозможна. Для этого вам необходимо предоставить пользовательскую реализацию. Проверьте эту ссылку http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg30094.html

+0

его позор, но плохо сделал это сам :(может быть, e4 улучшится на этом – kostja

+0

@kostja - e4 по-прежнему будет использовать SWT и собственные элементы управления. Пока эти нативные элементы управления не обеспечивают вертикальную ориентацию или какой-либо поворот элементов управления или компонентов, нет никакого другого, кроме полного управления на основе Java (например, Swing) –

3

SWT использует стандартные виджеты, предоставляемые операционной системой хоста. Поэтому, если операционная система не поддерживает вертикально ориентированные элементы управления, SWT также не может ее предоставить.

2

Да возможно в SWT с использованием пользовательского виджета. Вам нужно зарегистрироваться Button/Label. В поле PaintListener получите объект Transform и поверните текст под нужным углом. В примере для каждого щелчка измените угол на эту последовательность 0,90,180,270. button (здесь фактически Canvas) соотношение сторон изменяется путем установки bounds. Не стесняйтесь играть с методом paint;

public class RotatingButton extends Canvas 
{ 
    private int  mouse   = 0; 
    private boolean hit    = false; 
    private String text   = "Button"; 
    float   rotatingAngle = 0f; 
    float[]   angles   = { 0, 90, 180, 270 }; 
    int    index   = 0; 
public RotatingButton(Composite parent, int style) 
{ 
    super(parent, style); 

    this.addListener(SWT.MouseUp, new Listener() 
    { 

     @Override 
     public void handleEvent(Event e) 
     { 
      index++; 
      index = index > 3 ? 0 : index; 
       Rectangle r = getBounds(); 

       setBounds(r.x, r.y, r.height, r.width); 


      rotatingAngle = angles[index]; 
      redraw(); 
     } 
    }); 
    this.addPaintListener(new PaintListener() 
    { 
     public void paintControl(PaintEvent e) 
     { 
      paint(e); 
     } 
    }); 
    this.addMouseMoveListener(new MouseMoveListener() 
    { 
     public void mouseMove(MouseEvent e) 
     { 
      if (!hit) 
       return; 
      mouse = 2; 
      if (e.x < 0 || e.y < 0 || e.x > getBounds().width 
        || e.y > getBounds().height) 
      { 
       mouse = 0; 
      } 
      redraw(); 
     } 
    }); 
    this.addMouseTrackListener(new MouseTrackAdapter() 
    { 
     public void mouseEnter(MouseEvent e) 
     { 
      mouse = 1; 
      redraw(); 
     } 

     public void mouseExit(MouseEvent e) 
     { 
      mouse = 0; 
      redraw(); 
     } 
    }); 
    this.addMouseListener(new MouseAdapter() 
    { 
     public void mouseDown(MouseEvent e) 
     { 
      hit = true; 
      mouse = 2; 
      redraw(); 
     } 

     public void mouseUp(MouseEvent e) 
     { 
      hit = false; 
      mouse = 1; 
      if (e.x < 0 || e.y < 0 || e.x > getBounds().width 
        || e.y > getBounds().height) 
      { 
       mouse = 0; 
      } 
      redraw(); 
      if (mouse == 1) 
       notifyListeners(SWT.Selection, new Event()); 
     } 
    }); 
    this.addKeyListener(new KeyAdapter() 
    { 
     public void keyPressed(KeyEvent e) 
     { 
      if (e.keyCode == '\r' || e.character == ' ') 
      { 
       Event event = new Event(); 
       notifyListeners(SWT.Selection, event); 
      } 
     } 
    }); 
} 

public void setText(String string) 
{ 
    this.text = string; 
    redraw(); 
} 

public void paint(PaintEvent e) 
{ 
    Transform tr = null; 
    tr = new Transform(e.display); 

    Rectangle r =getBounds(); 
    text=e.gc.stringExtent(text)+""; 
    e.gc.setAntialias(SWT.ON); 
    Point p=e.gc.stringExtent(text); 
    int w = e.width; 
    int h = e.height; 
    tr.translate(w/2, h/2); 
    tr.rotate(rotatingAngle); 
    e.gc.setTransform(tr); 
    e.gc.drawString(text, r.x-(p.x/3)*2,r.y-p.y); 
} 
} 

Screen SHOT

Смежные вопросы