Hmmm...Jdesktop + alpha + some interesting painting trouble

Hi,



I seem to have a strange problem , I have a jdesktop pane on which i have a panel

absolutely positioned…



on this panel i have a label … both the panel and the label have a color of (0,0,0,100) alfa



the problem is simple … every time i update the text on the label , the prev text is not erased…

instead the new text gets overlayed on the prev text…



i might be missing something really …really stupid ((after all its 4 am right now. and i cant really sleep b4 solving this.  :expressionless: . :frowning: ))



so …what am i missing??? 



package com.grandmaster.Game.screens;

import com.jme.renderer.ColorRGBA;
import com.jme.renderer.Renderer;
import com.jme.scene.Node;
import com.jme.scene.shape.Quad;
import com.jme.system.DisplaySystem;
import com.jmex.awt.swingui.JMEDesktop;
import com.jmex.awt.swingui.JMEDesktopState;
import com.grandmaster.Game.skins.SkinManager;
import com.grandmaster.Game.skins.SkinEnum;

import javax.swing.*;
import java.net.URL;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ChessBoardMainScreenHUD extends JMEDesktopState {
    private Node HudNode;
    private DisplaySystem display;
    private ChessBoardMainScreen main;
    private JMEDesktop desktop;
    private JLabel lbl;
    private JPanel topPanel;

    public ChessBoardMainScreenHUD(ChessBoardMainScreen main_scr) {

        super(true); // Inits it to the size of the sceen
        this.main = main_scr;
        main.setHud(this);
        desktop = this.getDesktop();
        display = DisplaySystem.getDisplaySystem();
        HudNode = this.getRootNode();
        HudNode.setRenderQueueMode(Renderer.QUEUE_ORTHO);
        initGUI();
        HudNode.updateRenderState();
        HudNode.setLocalTranslation(0, 0, 0);
    }

    public void SetInfo(String text){
       
        lbl.setText(text);
        lbl.repaint();
        topPanel.repaint();
       
    }

    private void initGUI() {
        topPanel = new JPanel();
        topPanel.setLayout(null);
        topPanel.setBackground(new Color(0, 0, 0, 128));
        topPanel.setBorder(BorderFactory.createEmptyBorder());

        lbl = new JLabel("asdsdssaasdsds");
        lbl.setBorder(BorderFactory.createEtchedBorder());
        lbl.setForeground(new Color(255,255,255));
        topPanel.add(lbl);

        lbl.setSize(display.getWidth(),50);
        lbl.setLocation(0,0);



        topPanel.setLocation(0,0);
        topPanel.setSize(display.getWidth(),50);

        desktop.getJDesktop().add(topPanel);
               
        final JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(null);
        //Add buttons to the experiment layout
        bottomPanel.setBackground(new Color(0, 0, 0, 128));
        bottomPanel.setBorder(BorderFactory.createEmptyBorder());

        JButton tp = new JButton("");
        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButZoom).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButZoomHighlight).getUrl()));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(10, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.getChessBoardHandler().ActivateZoomMode();
            }
        });
        bottomPanel.add(tp);


        tp = new JButton("");
        tp.setForeground(new Color(255,255,255));

        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButRotate).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButRotateHighlight).getUrl()));
        tp.setMargin(new Insets(0,0,0,0));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(70, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.getChessBoardHandler().ActivateBoardRotationMode();
            }
        });
        bottomPanel.add(tp);

        tp = new JButton("");
        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButTranslate).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButTranslateHighlight).getUrl()));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(130, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.getChessBoardHandler().ActivateTranslateMode();
            }
        });
        bottomPanel.add(tp);


        tp = new JButton("");
        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPick).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPickHighlight).getUrl()));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(190, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.getChessBoardHandler().ActivatePickMode();
            }
        });
        bottomPanel.add(tp);


        tp = new JButton("");
        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPick).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPickHighlight).getUrl()));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(190, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.getChessBoardHandler().ActivatePickMode();
            }
        });
        bottomPanel.add(tp);

        tp = new JButton("");
        tp.setBorder(BorderFactory.createRaisedBevelBorder());//createEmptyBorder());
        tp.setContentAreaFilled(false);
        tp.setIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPick).getUrl()));
        tp.setRolloverEnabled(true);
        tp.setRolloverIcon(new ImageIcon(SkinManager.getDefaultManager().getTextureInfo(SkinEnum.Tex_ButPickHighlight).getUrl()));
        tp.setSize(50, 50);//tp.getPreferredSize());
        tp.setLocation(display.getWidth() - 60, 10);
        tp.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                main.ExitToMenu();
            }
        });
        bottomPanel.add(tp);
       //desktop.getJDesktop().setBackground(new Color(1,1,1,0.2f));
        desktop.getJDesktop().add(bottomPanel);

        bottomPanel.setSize((display.getWidth()),70);// (int) (display.getHeight() -100));
        bottomPanel.setLocation(0, (int) (display.getHeight() -70));


    }

}



the text update takes plce in the function set info




i noticed the same, but when i switch the Tab in a JTabbedPane, it gets repainted correctly, but that doesn't help you very much i guess :slight_smile:



a JSLider also leaves artifacts until you release slider again.

hmm…  just a thought … 



can you pls tell me , how does painting occur in swing…



am not really sure…  so if we can force it , in a way when i want it… cuz for some reason it repaint function isnt working…



i really wonder y tho?



could aombody pls answer this?