Я потратил некоторое время, читая и экспериментируя здесь, и придумал несколько подходов, но пока еще ни один из них не работал полностью, поэтому я хотел бы знать, что будут делать более опытные программисты Swing.
Главное окно моего приложения содержит пользовательский подтип JPanel, который используется для отображения изображения, рассчитанного по математической функции.Это может занять некоторое время для расчета, поэтому пока это происходит, я отображаю текстовое сообщение и индикатор выполнения, наложенный на середину панели.Мне бы хотелось, чтобы размер текста и индикатор выполнения соответствующим образом изменялись при изменении размера панели, возможно, с использованием постоянной доли ширины панели.
В настоящий момент у меня есть другой подтип JPanel, который содержит текст ииндикатор выполнения, и я добавляю эту «панель прогресса» на главную панель и устанавливаю ее, чтобы она была видна при необходимости.Главная панель не содержит никаких других компонентов, но имеет собственный метод paintComponent () для отображения BufferedImage, полученного из другого класса.Есть несколько проблем с этим в его нынешнем виде:
- Панель прогресса не всегда видна, когда она должна быть, возможно, потому что в коде нет нигде, который бы явно гарантировал, что он будет нарисован передimage.
- Панель прогресса всегда занимает всю ширину панели приложения.Он центрируется по вертикали с помощью BoxLayout на главной панели с некоторым вертикальным клеем до и после панели прогресса, но мне не удалось заставить один и тот же прием работать горизонтально, и в любом случае предпочтительный горизонтальный размер панели прогрессане обязательно верно.Один из подходов, который почти работает, состоит в использовании BorderLayout с горизонтальными и вертикальными распорками вокруг панели прогресса, но размер панели прогресса все еще не правильный, и стойки должны быть изменены при изменении размера главной панели.
Так что бы вы сделали?
- Использовать другой менеджер макета на главной панели?
- Как-нибудь использовать LayeredPane или OverlayLayout?
- Добавитьеще один слой иерархии содержания, содержащий панель изображений и панель прогресса?
- Некоторая комбинация вышеперечисленного или что-то еще?
Как насчет изменения размера текста.Нужно ли явно создавать новый шрифт при изменении размера панели, или есть ли способ сделать это более автоматически?-