JButton не меняет цвет фона после применения внешнего вида Windows [duplicate]

Используйте URLSessionDownloadTask для загрузки файлов в фоновом режиме, чтобы они могли быть завершены, даже если приложение завершено.

Для получения дополнительной информации см .:

https://www.ralfebert.de/snippets/ios/urlsession-background-downloads/

Он также показывает, как реализовать мониторинг выполнения для нескольких задач, выполняющихся параллельно:

3
задан Omid 10 April 2013 в 21:26
поделиться

3 ответа

Взгляните на ошибку 4880747: XP L & amp; F: REGRESSION: setBackground на JButton устанавливает цвет рамки в Windows XP . В разделе оценки указано:

Изменение внешнего вида кнопки всегда может вызывать конфликты с текущей реализацией L & amp; F. Windows L & amp; F для Swing пытается быть как можно ближе к собственному дисплею. В XP мы используем встроенные растровые ресурсы для кнопок. Они не могут быть раскрашены, как в собственном API.

Вы должны вызвать setContentAreaFilled (false) на кнопке, чтобы избежать того, чтобы L & amp; F рисовал свои декорации. Это имеет побочный эффект, когда свойство opaque кнопки установлено в false, поэтому вам нужно следовать этому вызову с вызовом setOpaque (true).

Это не ошибка и будет закрыта.

Как указано, setContentAreaFilled(false) и setOpaque(true) сделают трюк, но кнопка будет выглядеть по-другому.

Если это стоит того, вы можете создать свой собственный ButtonUI. Вот отличный пример by @mKorbel, который может оказаться полезным.

5
ответ дан Community 22 August 2018 в 09:29
поделиться
  • 1
    Это довольно поздно, но я все еще чувствую необходимость оставить благодарственное сообщение. Это помогло мне. :) – Soham Chowdhury 22 December 2015 в 10:58

Это зависит от того, чего вы хотите достичь.

Вы можете использовать JButton#setContentAreaFilled, передавая его false, но вам, вероятно, также нужно будет вызвать JButton#setBorderPainted, когда он будет падать

Вы также можете изменить значение по умолчанию UIManager для фона кнопок

1
ответ дан MadProgrammer 22 August 2018 в 09:29
поделиться
  • 1
    Если мы установим значение по умолчанию UIManager, это изменение будет отражено для всех Jbuttons. Разве нет способа изменить фон только одного JButton? – Vishal K 10 April 2013 в 22:08
  • 2
    Не совсем, пока поддерживается внешний вид кнопки – MadProgrammer 10 April 2013 в 22:24
  • 3
    +1 для setContentAreaFilled. Это выглядит забавно с WindowsLookAndFeel, хотя :) – tenorsax 10 April 2013 в 22:51
  • 4
    @VishalK Я действительно думал, что вы можете предоставить свой собственный делегат пользовательского интерфейса, но это будет означать, что вам нужно предоставить один для каждого возможного внешнего вида и ощущения, который вы хотите использовать, это большая работа – MadProgrammer 10 April 2013 в 23:15

Вы должны сделать JButton непрозрачным:

btnNewButton.setOpaque(true);

Как указано для метода JComponent#setBackground в документации оракула:

Устанавливает цвет фона этого компонента. Цвет фона используется только в том случае, если компонент непрозрачен, и только подклассами реализаций JComponent или ComponentUI. Прямые подклассы JComponent должны переопределить paintComponent, чтобы почтить это свойство.

Почитайте это свойство, и некоторые могут игнорировать его.

Я думаю, что текущий внешний вид не поддерживает это свойство. Вот почему цвет фона в этом случае игнорируется.

0
ответ дан Vishal K 22 August 2018 в 09:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: