PDA

Visualizza la versione completa : (Java) rendere trasparente un label


matpirata
29-04-2005, 13:44
Ciao, ho una label che voglio rendere trasparente per non coprire l'immagine di sfondo della finestra (ovviamente il testo della label deve rimanere visibile).

Ho trasformato la label in JLabel per poter usare setOpaque(), ma appena trasformo la label in JLabel sparisce dal JPanel al quale era legata.
Qualcuno capisce il perchè?
Grazie
:ciauz:

dekdek
29-04-2005, 14:31
Posta il codice... :)

matpirata
29-04-2005, 14:46
Credo che impazzirai hahaha
Sicuamente troverai un mare di cazzate, sono novizio :D



package sistema_criptaggio;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color.*;
import java.*;


public class Sistema_Criptaggio extends Frame
{
Button b_esegui_insert;

Image sfondo;

TextArea Text_stampasx;
TextArea Text_stampadx;

//carico nell'oggetto image sfondo lo sfondo
public void init()
{
sfondo = Toolkit.getDefaultToolkit().getImage("3.jpg");
}
// imposto l'immagine come sfondo///////
public void paint(Graphics g)
{
//setBackground(Color.blue);
g.drawImage(sfondo,0,0,this);
}




public Sistema_Criptaggio()
{

super("Sistema di Crittaggio Dati");


setSize(800,400);
setLocation(50,50);




// creo la griglia per la disposizione delgi oggetti
setLayout(new GridLayout(6,2));


// imposto a null il layout per poter disporre gli oggetti
setLayout(null);


// creo i pannelli
JPanel pannello_superiore = new JPanel();
Panel pannello_centrale = new Panel();
Panel pannello_inferiore = new Panel();
Panel pannello_bottoni = new Panel();
Panel pannello_divisorio = new Panel();
Panel pannello_risultati = new Panel();
Panel pannello_stampa = new Panel();

// creo la griglia nei panneli
pannello_superiore.setLayout(new GridLayout(2,2));
pannello_centrale.setLayout(new GridLayout(1,2));
pannello_inferiore.setLayout(new GridLayout(1,2));
pannello_bottoni.setLayout(new GridLayout(1,3));
pannello_divisorio.setLayout(new GridLayout(1,1));
pannello_risultati.setLayout(new GridLayout(1,2));
pannello_stampa.setLayout(new GridLayout(1,2));

// imposto a null il layout per poter disporre gli oggetti
// e imposto il setbounds
pannello_superiore.setLayout(null);
pannello_superiore.setBounds(5,31,800,30);
pannello_superiore.setBackground(Color.red);
pannello_superiore.setOpaque(true);


pannello_centrale.setLayout(null);
pannello_centrale.setBounds(5,62,800,30);
//pannello_centrale.setBackground(Color.white);

pannello_inferiore.setLayout(null);
pannello_inferiore.setBounds(5,93,800,30);
//pannello_inferiore.setBackground(Color.BLUE);

pannello_bottoni.setLayout(null);
pannello_bottoni.setBounds(5,124,800,30);
//pannello_bottoni.setBackground(Color.GREEN);

pannello_divisorio.setLayout(null);
pannello_divisorio.setBounds(5,155,800,30);
//pannello_divisorio.setBackground(Color.red);

pannello_risultati.setLayout(null);
pannello_risultati.setBounds(5,186,800,30);
//pannello_risultati.setBackground(Color.blue);

pannello_stampa.setLayout(null);
pannello_stampa.setBounds(5,217,800,300);


//creo le etichette e le dispongo
Label Label_superiore = new Label("Nome");
Label_superiore.setBounds(1,5,70,20);



Label Label_centrale = new Label("Cognome");
Label_centrale.setBounds(1,5,70,20);
// Label_centrale.setBackground(Color.gray);

Label Label_inferiore = new Label("Indirizzo");
Label_inferiore.setBounds(1,5,70,20);
//Label_inferiore.setBackground(Color.pink);

Label Label_dati_crittati = new Label("Dati Crittati");
Label_dati_crittati.setBounds(1,5,70,20);
// Label_dati_crittati.setBackground(Color.red);

Label Label_dati_non_crittati = new Label("Dati Non Crittati");
Label_dati_non_crittati.setBounds(390,5,90,20);
//Label_dati_non_crittati.setBackground(Color.cyan);

//creo le textarea
Text_stampasx = new TextArea("Ciao");
Text_stampasx.setBounds(0,0,390,178);
Text_stampasx.setEditable(false);
Text_stampasx.setBackground(Color.white);

Text_stampadx = new TextArea("Ciao");
Text_stampadx.setBounds(391,0,396,178);
Text_stampadx.setEditable(false);
Text_stampadx.setBackground(Color.white);

//creo le text e le dispongo
TextField Text_superiore = new TextField();
Text_superiore.setBounds(80,5,400,20);

TextField Text_centrale = new TextField();
Text_centrale.setBounds(80,5,400,20);

TextField Text_inferiore = new TextField();
Text_inferiore.setBounds(80,5,400,20);

//creo button
b_esegui_insert = new Button("Esegui Insert");
b_esegui_insert.setBounds(5,5,100,20);

Button b_esegui_pulizia = new Button("Pulisci Campi");
b_esegui_pulizia.setBounds(120,5,100,20);

Button b_visualizza_dati = new Button("Visualizzati Dati Crittati");
b_visualizza_dati.setBounds(235,5,150,20);

//attacco i pannelli alla finestra
add(pannello_superiore);
add(pannello_centrale);
add(pannello_inferiore);
add(pannello_bottoni);
add(pannello_divisorio);
add(pannello_risultati);
add(pannello_stampa);

//attacco le label e le text ai pannelli
pannello_superiore.add(Label_superiore);
pannello_superiore.add(Text_superiore);

pannello_centrale.add(Label_centrale);
pannello_centrale.add(Text_centrale);

pannello_inferiore.add(Label_inferiore);
pannello_inferiore.add(Text_inferiore);

pannello_bottoni.add(b_esegui_insert);
pannello_bottoni.add(b_esegui_pulizia);
pannello_bottoni.add(b_visualizza_dati);

pannello_stampa.add(Text_stampasx);
pannello_stampa.add(Text_stampadx);


pannello_risultati.add(Label_dati_crittati);
pannello_risultati.add(Label_dati_non_crittati);

init();
setVisible(true);
ascoltatore();

}






// main ///////////////////////////////////////////////////////////
public static void main(String[] args) {
Sistema_Criptaggio sistema_criptaggio = new Sistema_Criptaggio();

}


public void ascoltatore()
{
b_esegui_insert.addActionListener(new AscoltatoreMenu());
}

///////// classe ascoltatore //////////////////////
class AscoltatoreMenu implements ActionListener
{

public void actionPerformed (ActionEvent e)
{
String comando = e.getActionCommand();

System.out.println("si");
if(comando == "Esegui Insert")
{
Text_stampasx.setText("si dfhskjhfksdfhk\n kjs fhsd ksjhf kshd fkhsdkfhskj ksdfh ksdhj sk kjs fhsd ksjhf kshd fkhsdkfhskj<HTML>");
System.out.println("sino");
}
else
{

System.out.println("no");
}

}

}



}

dekdek
29-04-2005, 15:16
Se usi componenti awt, usa SOLO componenti awt.
Mischiandole ottieni effetti imprevedibili.
JLabel e' una componente swing e viene dipinta in modo "diverso".

In generale, non usare awt, a meno di non avere buoni motivi per farlo (nel tuo caso, avendo appena iniziato, non credo tu abbia alcun motivo...)

dekdek
29-04-2005, 15:50
AAAAAAAAAAAARGGHHHH! So' stato un casino di tempo sul costruttore prima di notare il paint()...

Usa questo:



public void paint(Graphics g) {
super.paint (g);
//setBackground(Color.blue);
g.drawImage(sfondo,0,0,this);
}


Come ti ho detto, i componenti Swing (JFrame, JButton, JTextField, etc. etc... tutti derivati da JComponent) vengono "dipinti", in particolare dai metodi paint() delle varie superclassi della tua. Quindi devi richiamare prima paint della tua superclasse (che a sua volta richiamera' paint della sua superclasse e cosi' via...) e poi aggiungere gli elementi che desideri.

I componenti AWT (Window, Frame, Button, Label, e altri derivati da Component) invece, vengono generati dal sistema operativo. Cio', se da un lato e' comodo, dall'altro rende la portabilita' delle applicazioni un macello: in pratica i componenti awt devono limitarsi a fornire funzionalita' che _TUTTI_ i sistemi operativi possono fornire.

Contrariamente a quanto potresti immaginare, i componenti Swing sono estensioni (in senso lato) dei componenti awt, nel senso che la classe JComponent estende la classe Component (ma JButton non estende Button!!!)

Bene, spero di averti confuso le idee... :D

Loading