возможно ли иметь вертикальные элементы управления SWT? - PullRequest
0 голосов
/ 01 октября 2010

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

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

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

2 голосов
/ 28 ноября 2015

Да, это возможно в 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

2 голосов
/ 01 октября 2010

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

...