Avatar billede zapzie Nybegynder
01. december 2004 - 19:17 Der er 10 kommentarer og
1 løsning

Transparent component over billede

Jeg har et billede, som jeg tegner på et JPanel, ved hjælp af paint(Graphics g) metoden. Jeg vil så have et halv-transparent JLabel til at ligge hen over, men det er som om det forsvinder ind under, da det kan ikke ses.
Jeg har en MouseMotionListener på og kan se at jeg godt kan flytte med det.
Er der en mulighed for at få det til at komme forest, eller bliver jeg nødt til at tegne en halv-transperant rektangel på, med Graphics?
Avatar billede _carsten Nybegynder
01. december 2004 - 19:20 #1
Prøv med: minLabel.setOpague(true);
Avatar billede zapzie Nybegynder
01. december 2004 - 19:23 #2
Nope. virker ikke.

Den er halv-transparent (Bruger new Color(255, 255, 0, 75)) og jeg kan se den, hvis jeg ikke maler billedet på.
Avatar billede _carsten Nybegynder
01. december 2004 - 19:49 #3
Betyder det at du får compilefejl eller hvad ??

Skulle være: minLabel.setOpaque(true);

(q ikke g)
Avatar billede zapzie Nybegynder
01. december 2004 - 20:02 #4
Nej, ikke en compilefejl. Sorry.
Der er ingen ændring at se.
Avatar billede _carsten Nybegynder
01. december 2004 - 20:14 #5
Så må det være p.g.a. dit valg af baggrundsfarve

public class Exp extends javax.swing.JFrame {

    public Exp() {
        initComponents();
        getContentPane().setBackground(Color.blue);
        jLabel1.setOpaque(true);
        jLabel2.setOpaque(true);
        jLabel1.setBackground(new Color(255, 255, 0, 75) );
        jLabel2.setBackground(new Color(155, 255, 100, 75) );
    }
   

    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setText("jLabel1");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(30, 14, 110, 30);

        jLabel2.setText("jLabel2");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(50, 30, 34, 60);

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Exp().setVisible(true);
            }
        });
    }
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;   
}
Avatar billede zapzie Nybegynder
01. december 2004 - 20:42 #6
Ja det der virker, men det er når man har et billede bag ved, fx et .gif billede
Avatar billede _carsten Nybegynder
02. december 2004 - 07:39 #7
Ja - det kan jeg se, den kan jeg ikke lige knække, men kigger på det i aften hvis du ikke har løst problemet inden da.
Avatar billede zapzie Nybegynder
02. december 2004 - 14:06 #8
ok.
Avatar billede _carsten Nybegynder
05. december 2004 - 19:55 #9
Ked af at det blev en laaaaang aften, men jeg røg ind i en julefrokost mere end jeg havde beregnet, 3 stk af slagsen lige i rap og jeg tør godt garantere, det er det mest brutale man kan blive udsat for.

Nå - men her er et eksempel med billede på et JPanel og en JLabel ovenpå billedet, billedet skulle gerne delvis dække den gif som ligger nedenunder. Det du især skal studere er metoden paintComponent(Graphics g) i klassen TestPanel, den får det hele til at fungere.



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Test extends javax.swing.JFrame {
   
    public Test() {
        initComponents();
    }
   
    private void initComponents() {                         
        TestPanel panel = new TestPanel();
        getContentPane().add(panel);
        setSize(300,300);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        pack();
    }                       
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test().setVisible(true);
            }
        });
    }
}



class TestPanel extends JPanel{
    public TestPanel(){
        stiTilBillede = ""; // HUSK AT INDSÆTTE STIEN "C:\\WHATEVER.GIF"
        JLabel label = new JLabel("ASDFASDFSAD");
        add(label);
        label.setBounds(60,60,100,20);
        label.setOpaque(true);
        label.setBackground(new Color(255, 255, 0, 75)) ;
        setLayout(null);
    }
   
    public void paintComponent(Graphics g){
        if(img == null){
            Toolkit tool = Toolkit.getDefaultToolkit();
            img = tool.createImage( stiTilBillede );
            g.drawImage(img,50,50, this);
        }
        else
            g.drawImage(img,50,50, this);

        paintChildren(g);
    }
   
    private Image img;
    private String  stiTilBillede;
}
Avatar billede _carsten Nybegynder
05. december 2004 - 19:58 #10
Aaargh

setSize(300,300); skal flyttes herop

public Test() {
        initComponents();
        setSize(300,300);
Avatar billede zapzie Nybegynder
05. december 2004 - 20:38 #11
Ok. Det ser ud til at virke.
Kigger på det i morgen. Har ikke lige overskud til det nu :)

Men du skal da have dine points.

Mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester