2012-02-13 26 views
2

当内容长于显示区域时,我试图使JTextField显示点。我想要有与JTable类似的行为,当我调整列的大小时,内部文本会发生变化 - 只显示它的长度,然后显示三个点(请参阅第一个示例从这link和改变列大小 - 我不能张贴图像,因为我在这里是新的;))JTextField在内容太长时显示'...'

是可能的吗?只有我心目中溶液与一类,将有更多的领域oryginalText并会那样做延长JTextField(没有测试它,它只是一个建议,JtextField的尺寸不会改变):

import javax.swing.JTextField; 

public class MyTextField extends JTextField { 

    private String oryginalText; 
    private int length; 

    @Override 
    public void setText(String text) { 
     oryginalText = text; 
     if (oryginalText.length() > length) 
      super.setText(oryginalText.substring(0, length - 2) + ".."); 
     else 
      super.setText(oryginalText); 
    } 
} 

有什么想法?

+5

实际上听起来不太友好。这实际上是文本字段的非标准行为。 – aioobe 2012-02-13 16:21:11

+2

同意,但另请参见[*用省略号截断字符串的理想方法*](http://stackoverflow.com/q/3597550/230513)。 – trashgod 2012-02-13 16:59:56

+3

您看到的行为是“JLabel”的行为。如果你的文本是不可编辑的,考虑使用它来代替'JTextField' – Robin 2012-02-13 17:00:41

回答

0

在您的扩展的JTextField和存储原始(未修剪)值的想法:

显示文本字段为禁用(或不编辑),用修剪文本。当用户对文本字段进行复制时,可以启用/可编辑并显示整个原始文本。

然后再次当用户按下输入或焦点退出的文本字段:禁用/不可编辑和修剪文本。