Как обсуждено здесь, при изменении размеров приложения Swing в Vista (и Windows 7, который является тем, что я использую) Вы получаете черный фон в праве/нижнем угле, в то время как перекрашивание Swing ловит до изменений.
Играя с другими приложениями (Windows Explorer (Собственный компонент), Firefox (C++?), и Eclipse (Java)) я замечаю, что у них всех есть эта та же проблема - вопреки тому, что люди в ссылке выше говорят - но они минимизируют проблему при наличии серого цвета заливки, который намного менее визуально издает неприятный звук, чем черный цвет, который появляется в Swing.
Я задаюсь вопросом, существует ли некоторый способ изменить это так, чтобы Swing вел себя как эти другие приложения? Я пытался выбрать цвет фона JFrame, но напрасно.
Дополнительный Info Jonas обнаружил (см. их информативный ответ ниже), что это - проблема с JFrames, но не Кадры AWT - возможно, который поможет кому-то понять это.
Я заметил ту же проблему. В 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);
}};
}
}
Я тоже заметил это. Для меня эта проблема была решена сменой менеджера раскладки (до этого я использовал Free Form Layout), и он работал довольно хорошо (раскраска цвета системы).
Но в конце концов я вернулся к FFL. Также некоторые известные приложения сталкиваются с этой проблемой (например, SKYPE), но меня это не беспокоит...