Я разрабатываю приложение с графическим интерфейсом, используя JSWing, загружаю файл XML, затем десериализую его, затем добавляю все созданные объекты в JPanel.
Однако до тех пор, пока я не переместлю окно или не нажму на панель, они выглядят так:
После того, как я переместил окно, они выглядят правильно, так как решить эту проблему <</p>
я посмотрел по этой ссылке
http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)
и это может быть ответом, так как в конструкторе JComponent я использую
setOpaque(true);
но я все еще не уверен, как решить проблему, так как эту часть документации очень трудно понять (это как-то просто не имеет никакого смысла для меня :-D)
кстати, сама картина выглядит примерно так
for (NetObject o : objects) {
addNewObject(o);
}
и addNewObject (не весь код)
public void addNewObject(NetObject o) {
DraggableComponent object = new DraggableComponent(o, editorIndex); //Creates a draggableComponent
this.add(object);//Adds this component to main container
object.setOverbearing(true); //On click ,this panel gains lowest z-buffer
object.setSize(48, 48);
object.setLocation(o.x - 23, o.y - 23);
object.setBackground(Color.WHITE);
this.repaint(); //this = JPanel
} * * тысяча двадцать-один
и переопределенный код PaintComponent
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (isOpaque()) {
if (object.type == 2) { //tarnsition
g.drawImage(transition, 0, 0, this);
} else if (object.type == 1) {
boolean test = g.drawImage(place, 0, 0, this); //place
g.drawString(object.loadTokens(), 3, 27); // 1,2,3,4...
}
}
}
Я пытался вызвать this.revalidate - после FOR EACH LOOP - не помогло, единственный способ, который работает, это как-то перемещаться с окном, как ни странно, эта проблема существует только @ Windows, мой коллега разрабатывает это точно такое же приложение под Linux, и у него нет проблем с графикой.
Я знаю, что подобных тем было очень много, но я, честно говоря, не смог найти решение.
Спасибо за ответ,
Осирис