Изменение базового цвета фона окна Swing

Как обсуждено здесь, при изменении размеров приложения Swing в Vista (и Windows 7, который является тем, что я использую) Вы получаете черный фон в праве/нижнем угле, в то время как перекрашивание Swing ловит до изменений.

Играя с другими приложениями (Windows Explorer (Собственный компонент), Firefox (C++?), и Eclipse (Java)) я замечаю, что у них всех есть эта та же проблема - вопреки тому, что люди в ссылке выше говорят - но они минимизируют проблему при наличии серого цвета заливки, который намного менее визуально издает неприятный звук, чем черный цвет, который появляется в Swing.

Я задаюсь вопросом, существует ли некоторый способ изменить это так, чтобы Swing вел себя как эти другие приложения? Я пытался выбрать цвет фона JFrame, но напрасно.

Дополнительный Info Jonas обнаружил (см. их информативный ответ ниже), что это - проблема с JFrames, но не Кадры AWT - возможно, который поможет кому-то понять это.

13
задан dimo414 24 July 2017 в 05:46
поделиться

2 ответа

Я заметил ту же проблему. В IE этот цвет серый, в Opera - черный, а в Eclipse - серый. Кажется, что в Swing он будет более заметным, потому что он будет немного медленнее перекрашивать, а цвет, как вы сказали, черный . Эта проблема более заметна, если вы используете левый верхний угол для изменения размера.

Я закодировал пример и попытался понять, где определяется этот черный цвет. JFrame имеет много слоев , поэтому я установил свой фон для каждого слоя.

import java.awt.Color;
import javax.swing.JFrame;

public class BFrame {

    public static void main(String[] args) {
        new JFrame() {{
            super.setBackground(Color.CYAN);
            this.getRootPane().setBackground(Color.BLUE);
            this.getLayeredPane().setBackground(Color.RED);
            this.getContentPane().setBackground(Color.YELLOW);
            this.setSize(400,340); 
            this.setVisible(true);
        }};
    }
}

Но этот пример не помог. И, возможно, цвет устанавливается суперклассом на Frame .

java.lang.Object
  java.awt.Component
      java.awt.Container
          java.awt.Window
              java.awt.Frame

Моя теория состоит в том, что, поскольку Swing рисует себя, но использует собственное окно, то собственный фон окрашивается до изменения размера, а фон Swing окрашивается после изменения размера. Но для нативных приложений фон закрашивается до изменения размера.

ОБНОВЛЕНИЕ: Я пробовал использовать фрейм , и не имел той же проблемы. Фоновый шов, который нужно закрасить перед изменением размера.

import java.awt.Color;
import java.awt.Frame;

public class B2Frame extends Frame {

    public static void main(String[] args) {
        new Frame() {{
            setBackground(Color.YELLOW);
            setSize(400,340);
            setVisible(true);
        }};
    }

}
3
ответ дан 2 December 2019 в 01:57
поделиться

Я тоже заметил это. Для меня эта проблема была решена сменой менеджера раскладки (до этого я использовал Free Form Layout), и он работал довольно хорошо (раскраска цвета системы).

Но в конце концов я вернулся к FFL. Также некоторые известные приложения сталкиваются с этой проблемой (например, SKYPE), но меня это не беспокоит...

1
ответ дан 2 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

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