Я бы предложил использовать Graphics.MeasureString
.
Сначала вы создаете объект Graphics
, затем вызываете MeasureString
на нем, передавая строку и шрифт текстового поля .
Пример
string text = "TestingTesting\nTestingTesting\nTestingTesting\nTestingTesting\n";
// Create the graphics object.
using (Graphics g = textBox.CreateGraphics()) {
// Set the control's size to the string's size.
textBox.Size = g.MeasureString(text, textBox.Font).ToSize();
textBox.Text = text;
}
Вы также можете ограничить его вертикальной осью, установив только свойство textBox.Size.Height
и используя перегрузку MeasureString
, которая также принимает int width
.
Редактировать
Как указал Слэкс, другая опция использует TextRenderer.MeasureString
. Таким образом, нет необходимости создавать объект Graphics
.
textBox.Size = TextRenderer.MeasureString(text, textBox.Font).ToSize();
Здесь вы можете ограничить вертикальное изменение размера с помощью техники Ганса, передав дополнительный параметр Size
в MeasureString
с int.MaxValue
высота.
Если Вы, оказывается, используете JBoss, существует MBean (репозиторий загрузчика класса iirc), где можно попросить все classloaders, которые загрузили определенный класс.
, Если все остальное перестало работать, всегда существуют '-verbose:class' Java, которые распечатают местоположение банки для каждого файла класса, который загружается.
В текущей версии Java управление версиями библиотеки является довольно покрытым шерстью термином, который полагается на JAR, упаковываемый правильно с полезной декларацией. Даже тогда это - большая работа для запущенного приложения для сбора этой информации вместе полезным способом. Время выполнения JVM не дает Вам справки вообще.
я думаю, что Ваш лучший выбор состоит в том, чтобы осуществить это во время изготовления, с помощью инструментов управления зависимости как Ivy или Maven для выборки правильных версий всего.
Интересно, Java 7 будет, вероятно, включать надлежащую платформу управления версиями модуля для точно этого вида вещи. Не то, чтобы это помогает Вам прямо в данный момент,
Если у Вас есть соответствующая информация о версиях в декларации банки, существуют методы, чтобы получить и протестировать версию. Никакая потребность вручную прочитать декларацию.
java.lang. Пакет .getImplementationVersion () и getSpecificationVersion () и isCompatibleWith () кажутся, что сделали бы то, что Вы ищете.
можно получить Пакет с this.getClass () .getPackage () среди других путей.
javadoc для java.lang. Пакет не дает определенные явные названия атрибута для этих атрибутов. Быстрый поиск Google поднял его в http://java.sun.com/docs/books/tutorial/deployment/jar/packageman.html
Я не думаю, что существует хороший способ проверить это. И я не уверен, что Вы хотите сделать это. То, что необходимо сделать, знакомятся с архитектурой загрузки класса сервера приложений и понимают, как это работает.
А упростил объяснение того, как это работает: EJB или веб-приложение будут сначала искать класс или ресурс в библиотеках, объявленных в его собственном модуле (ejb-банка или война). если класс не найден там, загрузчик класса передает запрос к своему загрузчику родительского класса, который является любой заявленной зависимостью (обычно ejb) или загрузчик класса приложений, который ответственен для загрузки библиотек и ресурсов, объявленных в пакете уха. Если класс или ресурс все еще не найдены, запрос передается к серверу приложений, который будет выглядеть в его собственном пути к классу.
Это сказанное, необходимо помнить, что модуль EE Java (веб-приложение, ejb) будет всегда загружать классы из банки, которая находится в самом близком объеме. Например, если Вы упакуете log4j v1 в военном файле, log4j v2 на уровне уха, и Вы помещаете log4j v3 в путь к классу своего сервера приложений, модуль будет использовать банку в своем собственном модуле. устраните это, и это будет использовать тот на уровне уха. выньте это, и это будет использовать тот в пути к классу сервера приложений. Вещи становятся более хитрыми, когда у Вас есть сложные зависимости между модулями.
Лучший должен поместить приложение глобальные библиотеки в уровень уха.
Должен быть лучший путь, чем способ, которым я делаю это, но я склонен делать это очень ручным способом.
, Поскольку я сказал, это является ручным, но это работает.