如何根据要显示的文本定义SWT中文本的长度?

时间:2015-09-29 09:51:25

标签: java swt eclipse-rcp

我有一个Text,它将显示不同长度的不同数据。最初我使用的是固定长度的文本框。但是,显然这不起作用。 然后,我尝试获取文本的长度,使用该长度作为文本的宽度,如下所示 -

textName = new Text(composite, SWT.BORDER);
String myText = tree.getSelection()[0].getText();
int length = myText.length();
textName.setBounds(76, 28, length, 21);
textName.setText(myText);

但是,我发现字符串的长度和SWT中Text字段的宽度是完全不同的。 那么,有没有针对这个目的的解决方案?显然,我可以设置更高的宽度值。但是,我认为,这不是一个好的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以让computeSize对象计算其默认大小 首先设置文本,然后调用Text textName = new Text(composite, SWT.BORDER); String myText = tree.getSelection()[0].getText(); textName.setText(myText); Point size = textName.computeSize(SWT.DEFAULT, SWT.DEFAULT); textName.setBounds(76, 28, size.x, 21); 来计算文本字符串的屏幕像素大小:

Alamofire.download(.GET, fileUrls[button.tag], destination: { (temporaryURL, response) in
    if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
        let fileURL = directoryURL.URLByAppendingPathComponent(response.suggestedFilename!)
        self.localFilePaths[button.tag] = fileURL
        if NSFileManager.defaultManager().fileExistsAtPath(fileURL.path!) {
            NSFileManager.defaultManager().removeItemAtPath(fileURL.path!, error: nil)
        }
        return fileURL
    }
    println("temporaryURL - \(temporaryURL)")
    self.localFilePaths[button.tag] = temporaryURL
    return temporaryURL
}).progress { _, totalBytesRead, totalBytesExpectedToRead in
    println("\(totalBytesRead) - \(totalBytesExpectedToRead)")
    dispatch_async(dispatch_get_main_queue()) {
        self.progressBar.setProgress(Float(totalBytesRead) / Float(totalBytesExpectedToRead), animated: true)

        if totalBytesRead == totalBytesExpectedToRead {
            self.progressBar.hidden = true
            self.progressBar.setProgress(0, animated: false)
        }
    }
}.response { (_, _, data, error) in
    let previewQL = QLReaderViewController()
    previewQL.dataSource = self
    previewQL.currentPreviewItemIndex = button.tag
    self.navigationController?.pushViewController(previewQL, animated: true)
}

答案 1 :(得分:0)

您可以使用当前字体大小计算字符串大小,并按以下方式键入:

GC gc = new GC(textName);
Point textSize = gc.textExtent(myText);
gc.dispose();

textSize为您提供文本大小(以像素为单位)。然后你可以确定要设置的文本控件的大小。