【问题标题】:White, read-only Text field in SWTSWT 中的白色只读文本字段
【发布时间】:2013-06-21 20:54:53
【问题描述】:

我正在尝试在 SWT 窗口中制作一个大的白框来显示信息。我希望它看起来与标签不同,但我也希望它是不可编辑的。

到目前为止,我只能创建一个带有灰色背景(顶部)的中午可编辑文本框。我的目标是使用List(在Text 下)获得的外观。

List 的问题是它只能在每个列表项的一行上显示文本。我可能需要显示一段文本)。

【问题讨论】:

    标签: java swt readonly


    【解决方案1】:

    您还可以捕获键盘事件并阻止它们。

    txtField.addKeyListener( new KeyAdapter() {
        public void keyPressed( KeyEvent e ) {
            e.doit = false;
        }
    } );
    

    【讨论】:

      【解决方案2】:

      如果您确实必须使用白色背景,您可以使用普通的Text 并阻止对其进行编辑。

      但是,正如@Eugene 已经提到的,您应该遵守 UI 约定,否则可能会使用户感到困惑...

      这里有一些代码可以创建一个具有“正常”背景的只读Text

      public static void main(String[] args)
      {
          Display display = new Display();
          final Shell shell = new Shell(display);
          shell.setText("StackOverflow");
          shell.setLayout(new FillLayout());
      
          Text text = new Text(shell, SWT.BORDER);
          text.setText("Read only");
      
          text.addListener(SWT.Verify, new Listener()
          {
              @Override
              public void handleEvent(Event e)
              {
                  e.doit = false;
              }
          });
      
          shell.pack();
          shell.setSize(600, 60);
          shell.open();
          while (!shell.isDisposed())
          {
              if (!display.readAndDispatch())
                  display.sleep();
          }
          display.dispose();
      }
      

      【讨论】:

        【解决方案3】:

        您可以将 SWT.READ_ONLY 传递给您的文本字段构造函数。

        【讨论】:

        • 我这样做了,但这会使文本字段看起来是灰色的(如上所示),并且仅在文本周围立即应用周围的框。我希望它拉伸父复合的整个宽度(如列表所示)
        • 变灰有助于用户看到编辑内容是徒劳的。一般来说,我建议遵循 OS UI 约定。控件大小由布局控制,因此您可以将其设置为任意大小。你能列出你问题中的源代码吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2012-09-03
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        相关资源
        最近更新 更多