Как создать желтую подсказку с помощью Java swt?

Кто-нибудь может мне что-нибудь объяснить? Как я могу создать желтую подсказку/уведомление с помощью Java swt?

Я хочу, чтобы это всплывающее окно отображало небольшое уведомление, когда я перемещаюсь по ячейке в таблице. Что-то вроде этого:

введите здесь описание изображения

Это мой Java-код:

protected void checkAction() throws Exception {

    //Erstellen einer neuen Shell
    Shell shell = new Shell();
    shell.setSize(280, 300);
    shell.setText("Testtabelle");

    //Erstellen einer neuen Tabelle
    final Table table = new Table(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
    table.setLinesVisible(true);
    table.setHeaderVisible(true);

    //Einlesen der Überschriften und Vergabe der Namen
    String[] titles = {"Element", "Stage", "Type", "Generate-User", "Change-User" }; 
    for (int i = 0; i < titles.length; i++) {
      TableColumn column = new TableColumn(table, SWT.NONE);
      column.setText(titles[i]);
    }

    // Inhalte hinzufügen
    final int count = 4;
    for (int i = 0; i < count; i++) {
      TableItem item = new TableItem(table, SWT.NONE);
      item.setText(0, "Test "+i);
      item.setText(1, ""+(i+1));
      item.setText(2, "Testtype");
      item.setText(3, "562910");
      item.setText(4, "423424");
    }

   // Tabelle und Shell Packen  
   for (int i = 0; i < titles.length; i++) {
      table.getColumn(i).pack();
    }
    table.setSize(table.computeSize(SWT.DEFAULT, 200));
    shell.pack();

    //MouseListener

    table.addListener(SWT.MouseHover, new Listener() {
        public void handleEvent(Event event) {
          Rectangle clientArea = table.getClientArea();
          Point pt = new Point(event.x, event.y);
          int index = table.getTopIndex();
      //    System.out.println("TopIndex: "+index);
          while (index < table.getItemCount()) {
            boolean visible = false;
            TableItem item = table.getItem(index);
            for (int i = 0; i < (table.getItemCount()+1); i++) {
              Rectangle rect = item.getBounds(i);
              if (rect.contains(pt)) {
                String selected = table.getItem(index).getText(i);

                if (selected.equals("562910")){
                    String real = "Jonas";
                    System.out.println(real);

                }
                else{
                    System.out.println("Ausgewählt: "+selected);    
                }

              }
              if (!visible && rect.intersects(clientArea)) {
                visible = true;
              }
            } 
            if (!visible)
              return;
            index++;
          }
        }
      });


    // Shell öffnen
      shell.open();



}   

person JonnyBeton    schedule 12.02.2014    source источник
comment
Компоненты Awt тяжеловесны по своей природе. Вы можете использовать компонент Swing для создания таких меток.   -  person Sanjeev    schedule 12.02.2014
comment
спасибо за ваш ответ. ой, извини. Я допустил ошибку. я имею в виду увт. в моем проекте я могу использовать только swt, а не качаться :(   -  person JonnyBeton    schedule 12.02.2014


Ответы (2)


Используя только SWT, используйте код в SWT-фрагмент 125.

Если вы можете использовать JFace, то ColumnViewerToolTipSupport будет проще.

person greg-449    schedule 12.02.2014
comment
Эй, большое спасибо. теперь у меня проблема, что он работает только в первом столбце, а не в другом. есть ли команда для выбора столбцов, которые мне нужны для этой функции? - person JonnyBeton; 12.02.2014
comment
Вы имеете в виду, что он всегда показывает текст первого столбца или что-то еще? - person greg-449; 12.02.2014
comment
У меня есть таблица с 4 столбцами. Когда я перемещаюсь по ячейке в столбце 2-4, всплывающая подсказка появляется только в первом столбце. я хочу, чтобы всплывающие подсказки появлялись для отдельного столбца с определенным названием - person JonnyBeton; 12.02.2014
comment
Я думаю, вам придется перебирать столбцы, используя TableItem.getBounds(columnIndex), чтобы найти столбец, в котором находится мышь, а затем использовать текст столбца и границы для всплывающей подсказки. - person greg-449; 12.02.2014
comment
Можете ли вы сказать мне, где я должен добавить цикл? я начал запись: stackoverflow .com/questions/21727182/ - person JonnyBeton; 12.02.2014

Вы должны начать использовать jface TableViewer. Чтобы создать столбец таблицы, вы будете использовать TableViewerColumn.

Для каждого столбца добавьте CellLabelProvider с getToolTipXXX() методами.

TableViewerColumn.setLabelProvider(CellLabelProvider)

вот хорошая статья для начала

http://www.vogella.com/tutorials/EclipseJFaceTable/article.html

person sambi reddy    schedule 12.02.2014