2015-10-24 2 views
1

Я заметил, что если я попытаюсь показать Alert с длинным сообщением, он имеет тенденцию к усечению (на границе слова).Предупреждение JavaFX обрезает сообщение?

Пример:

import javafx.application.Application; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Alert.AlertType; 
import javafx.stage.Stage; 

public class AlertTest extends Application { 
    @Override 
    public void start(final Stage primaryStage) throws Exception { 
     new Alert(AlertType.INFORMATION, "this is a pretty long message that " 
       + "should not be truncated in this alert window, no matter " 
       + "how long it is").showAndWait(); 
    } 

    public static void main(final String... args) { 
     launch(args); 
    } 
} 

Эта ссылка отображается только «это довольно длинное сообщение, которое не должно быть усечены» здесь.
В чем причина усечения и как его избежать?

Я использую Oracle JDK 1.8.0_60 в Linux.

ответ

5

Я думаю, что это только вопрос для Windows и Linux. Это не происходит на MacOS. Однако я думаю, что это исправит его для вас на всех платформах.

Alert alert = new Alert(AlertType.INFORMATION); 
alert.setContentText("this is a pretty long message that " 
       + "should not be truncated in this alert window, no matter " 
       + "how long it is"); 
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); 
alert.showAndWait(); 
+0

Я пересматривал это сейчас и выяснил, что усечение происходит потому, что оно не выделяет достаточную высоту для текста контента, поэтому у него нет места для обертывания. Я не мог найти способ исправить проблему с высотой, но потом снова увидел ваш ответ и обнаружил, что он работает очень хорошо, без использования настраиваемого узла контента, но только встроенная метка содержимого (которую я предпочитаю). Для записи, похоже, мне все еще нужно setContent, например. новый ярлык, если я хочу избежать обертывания (и настроить его, чтобы он соответствовал содержимому) - просто другой вариант, который доступен. – aditsu

2

Try, как

Alert alert = new Alert(AlertType.INFORMATION); 
alert.getDialogPane().setContent(new Text("this is a pretty long message that " 
       + "should not be truncated in this alert window, no matter " 
       + "how long it is")); 
alert.showAndWait(); 
+0

Спасибо, но это делает окно очень широким, чтобы соответствовать тексту на одной строке, без упаковки. Я обнаружил, что могу решить это, вызвав 'setWrappingWidth' на объект Text. – aditsu

+0

@aditsu, правильно, но ваш вопрос состоял в том, чтобы избежать усечения, а не об обертке;) –

+1

Есть также пара других проблем с форматированием, но действительно, 'setContent' - это ключ, узел контента может быть настроен на что угодно и отрегулирован на будем. Было бы неплохо, если бы вы могли объяснить, почему он обрезается в исходной версии; кажется, что он использует обернутую метку, но каким-то образом диалог обрезает ее до первой строки? – aditsu

Смежные вопросы