java - SWT TableEditor 在 Ubuntu 中不显示文本框

标签 java swt

我正在 SWT 中构建一个表,该表需要一列可作为文本字段进行编辑。我从 http://www.java2s.com/ 中获取了示例并将它们编码到我的应用程序中。在 OSX Yosemite 中,这是有效的:当单击表格单元格时,该单元格变成一个文本框,并且表现得像一个文本框。

在 Ubuntu 14.04 (OpenJDK 8) 中使用相同的代码时,不会出现文本框,但编辑过程会在下面进行。为了测试这不是我的示例版本,我在这个环境中逐字运行了示例,并且它执行了完全相同的操作。示例中的代码是:

  public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        final Table table = new Table(shell, SWT.BORDER | SWT.MULTI);
        table.setLinesVisible(true);
        for (int i = 0; i < 3; i++) {
          TableColumn column = new TableColumn(table, SWT.NONE);
          column.setWidth(100);
        }
        for (int i = 0; i < 3; i++) {
          TableItem item = new TableItem(table, SWT.NONE);
          item.setText(new String[] { "" + i, "" + i, "" + i });
        }
        final TableEditor editor = new TableEditor(table);
        editor.horizontalAlignment = SWT.LEFT;
        editor.grabHorizontal = true;
        table.addListener(SWT.MouseDown, new Listener() {
          public void handleEvent(Event event) {
            Rectangle clientArea = table.getClientArea();
            Point pt = new Point(event.x, event.y);
            int index = table.getTopIndex();
            while (index < table.getItemCount()) {
              boolean visible = false;
              final TableItem item = table.getItem(index);
              for (int i = 0; i < table.getColumnCount(); i++) {
                Rectangle rect = item.getBounds(i);
                if (rect.contains(pt)) {
                  final int column = i;
                  final Text text = new Text(table, SWT.NONE);
                  Listener textListener = new Listener() {
                    public void handleEvent(final Event e) {
                      switch (e.type) {
                      case SWT.FocusOut:
                        item.setText(column, text.getText());
                        text.dispose();
                        break;
                      case SWT.Traverse:
                        switch (e.detail) {
                        case SWT.TRAVERSE_RETURN:
                          item
                              .setText(column, text
                                  .getText());
                        //FALL THROUGH
                        case SWT.TRAVERSE_ESCAPE:
                          text.dispose();
                          e.doit = false;
                        }
                        break;
                      }
                    }
                  };
                  text.addListener(SWT.FocusOut, textListener);
                  text.addListener(SWT.Traverse, textListener);
                  editor.setEditor(text, item, i);
                  text.setText(item.getText(i));
                  text.selectAll();
                  text.setFocus();
                  text.redraw(); text.update();
                  if (text.isFocusControl())
                      System.out.println("focussed");
                  return;
                }
                if (!visible && rect.intersects(clientArea)) {
                  visible = true;
                }
              }
              if (!visible)
                return;
              index++;
            }
          }
        });
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch())
            display.sleep();
        }
        display.dispose();
      }

最佳答案

更改文本框样式。将 final Text text = new Text(table, SWT.NONE); 行替换为 final Text text = new Text(table, SWT.BORDER);

当使用行 final Text text = new Text(table, SWT.NONE); 时,它看起来:

enter image description here

当使用行 final Text text = new Text(table, SWT.BORDER); 时,它看起来:

enter image description here

关于java - SWT TableEditor 在 Ubuntu 中不显示文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551814/

相关文章:

java - postgresql hibernate 插入时出现异常

java - CheckedTreeSelectionDialog 最初检查元素

java - JFace SWT TableViewer 中的图像和文本

java - 如何将图像对齐到表格单元格的中心(SWT 表格)

java - 为什么通知方法应该在同步块(synchronized block)内?

java - promise 堆与最大堆

java - 如何将各种数量的参数传递到 .properties 文件以获取消息?

java swt 图像(图像数据)旋转

从 SWT 3 切换到 SWT 4 时,JAVA SWT KeyDown 事件触发了 3 次而不是 1 次

java - 如何按名称实例化参数化类型类