Newsgroup: it.comp.java
Titolo: setBackground() no funge su textarea non editabile

Sto sviluppando la classica chat del principiante! Tutto ok ma quando provo
a dargli un tocco di colore con
setBackground() sulla java.awt.Textarea non editabile, rimane tutto molto
grigio.
Con swing ho visto  che lo sfondo si può settare anche sulle aree non
editabili, forse con awt no?
--
ciao, libeX


Chiama *prima* setEditable(false) e *poi* setBackground(Color.pink)...
Vedrai che bella chat rosa!
HTH,
Mauri.
-- 
La forza di gravità è un falso mito,
è la Terra che succhia!

 Vedrai che bella chat rosa!
Accidenti è più grigia di prima se è possibile! Avevo già provato ma grazie
comunque.
ciao libeX

comunque.
Posta il tuo codice, perchè *così* funziona (sia con IE che con
l'appletviewer...);
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class PinkChat extends Applet implements ActionListener
{
	TextArea ta;
 
	public void init()
	{
		setLayout(new BorderLayout());
		ta=new TextArea("",1,1,TextArea.
			SCROLLBARS_VERTICAL_ONLY);
		ta.setEditable(false);
		ta.setBackground(Color.pink);
		add(ta,"Center");
		TextField tf=new TextField();
		tf.addActionListener(this);
		add(tf,"South");
		tf.requestFocus();
	}
 
	public void actionPerformed(ActionEvent e)
	{
		Object source=e.getSource();
		if(source instanceof TextField)
		{
			TextField cast=(TextField)source;
			ta.append(cast.getText()+"\n");
			cast.setText("");
			cast.requestFocus();


 Posta il tuo codice
Ho trovato un post su un NG straniero in cui più d'uno aveva lo stesso
problema, qualcuno parlava
di bug perchè non funzia solo sul jdk1.3 .  L'unica soluzione proponibile
che è stata avanzata è quella
di aggirare il problema estendendo TextArea tipo:
--------------------
public class NoFocusTextArea extends TextArea {
    NoFocusTextArea (){
        super();
        setEnabled(true);
        setEditable(false);
    }
    public boolean isFocusTraversible(){
        return false;
    }
}
---------------------
A me comunque non funziona nemmeno così, intanto ecco il mio codice:
--------------------
private void buildGUI() {
       Panel pane = new Panel(new BorderLayout());
       Panel buttonPane = new Panel(new FlowLayout(FlowLayout.RIGHT));
       closePriv = new Button("Close all windows");
       closePriv.addActionListener(this);
       priv = new Button("Privates accepted");
       priv.addActionListener(this);
       buttonPane.add(closePriv);
        buttonPane.add(priv);
       outputArea = new TextArea("", 0, 0,
TextArea.SCROLLBARS_VERTICAL_ONLY);
       outputArea.setEditable(false);
        outputArea.setBackground(Color.white);
        Panel down = new Panel();
       down.setLayout(new BorderLayout());
        inputField = new TextField ();
        inputField.addActionListener(this);
        inputField.addKeyListener(this);
        down.add("West",new Label(" chat:"));
        down.add("Center",inputField);
  list = new java.awt.List(0,true);
  list.addMouseListener(this);
  pane.add("North",buttonPane);
  pane.add("Center",outputArea);
  pane.add("South",down);
  pane.add("East",list);
  status = new Label(" Disconnected");
  status.setForeground(new Color(30,30,30));
        setBackground(new Color(150,180,190));
       add ("Center", pane);
       add("South", status);
       validate();
       show();
    }
-----------------------
ciao libeX

Questione risolta con una utile quanto tardiva ricerca sul sito della sun:
Nel jdk1.3 il metodo TextComponent.setBackground non permette di settare lo
sfondo di un campo non editabile,
nessun BUG.
La soluzione è sovrascrivere il metodo in questione:
---------------------
public class TextAreaChat extends TextArea {
    Color bg;
    public TextAreaChat() {
        super();
        setEditable(false);
        bg = new Color(102, 153, 153);
    }
    public void setBackground(Color col) {
        bg = col;
        super.setBackground(col);
    }
    public Color getBackground() {
        return bg;
 }
}
---------------------
Grazie Mauri,
ciao libeX

 [CUT]
Inserito il tuo metodo in un Applet;
import java.awt.*;
import java.awt.event.*;
public class LibeX extends java.applet.Applet implements
ActionListener,KeyListener,MouseListener
{
	Button closePriv,priv;
	TextArea outputArea;
	TextField inputField;
	List list;
	Label status;
	public void init()
	{
		buildGUI();
	}
	public void actionPerformed(ActionEvent e){}
	public void keyTyped(KeyEvent e){}
	public void keyPressed(KeyEvent e){}
	public void keyReleased(KeyEvent e){}
	public void mouseClicked(MouseEvent e){}
	public void mousePressed(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	private void buildGUI() 
	{ 
		//your code here
	}
}
Compilato con jdk1.3.1;
Testato con IE6 (no plugin);
Testato con NS 4;
Testato con appletviewer SUN;
Sai che ti dico? In tutti e tre i test la TextArea è bianca!
Il problema non è nel codice...
Good luck,
Mauri.
P.s.: ah, lo show() nell'ultima riga, oltre che deprecated, è
superfluo.
