【问题标题】:How to create a yellow hint with Java swt?如何使用 Java swt 创建黄色提示?
【发布时间】:2014-03-10 12:05:36
【问题描述】:

有人可以解释一下吗?如何使用 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();



}   

【问题讨论】:

  • Awt 组件本质上是重量级的。您可以使用 Swing 组件来创建此类标签。
  • 感谢您的回答。哦对不起。我犯了一个错误。我的意思是swt。在我的项目中,我只能使用 swt 而不能使用 swing :(

标签: java swt jface hint


【解决方案1】:

仅使用 SWT 使用 SWT Snippet 125 中的代码。

如果您可以使用 JFace,那么 ColumnViewerToolTipSupport 会更容易。

【讨论】:

  • 嘿,非常感谢。现在我有一个问题,它只适用于第一列而不适用于另一列。是否有命令选择我想要此功能的列?
  • 你的意思是它总是显示第一列文本还是其他内容?
  • 我有一个有 4 列的表。当我在第 2-4 列中移动一个单元格时,工具提示仅出现在第一列中。我希望工具提示出现在具有特定标题的 inviduell 列中
  • 我认为您必须使用 TableItem.getBounds(columnIndex) 遍历列以找到鼠标所在的列,然后使用列文本和边界作为工具提示。
  • 你能说我必须在哪里添加循环吗?我已经开始了一个条目:stackoverflow.com/questions/21727182/…
【解决方案2】:

您应该开始使用 jface TableViewer。要创建表列,您将使用TableViewerColumn

对于每一列,添加具有getToolTipXXX() 方法的CellLabelProvider

TableViewerColumn.setLabelProvider(CellLabelProvider)

这是一篇不错的文章

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

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多