Newsgroup: it.comp.java
Titolo: problema swing

Salve a tutti, mi aiutate? Ho il frame diviso in due, a destra c'è un tasto
e quando lo premo il lato destro dovrebbe diventare rosso e apparire una
seconda scritta. Il problema è che la scritta appare un attimo, poi torna lo
stato precendente. Potreste suggerirmi qualcosa per far restare una scritta
(o un disegno, dovrebbe essere la stessa cosa, sbaglio?). Accetto tutti i
suggerimenti, anche su stile, indentazione...qualsiasi cosa. Grazie.
Cippo741
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Prova
{
   JButton Avanti = new JButton("Avanti");
   disegno destro = new disegno();
   disegno sinistro = new disegno();
   public void createAndShowGUI()
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      final JFrame frame = new JFrame();
      frame.setSize(800,600);
      frame.getContentPane().setLayout(new GridLayout(1, 2));
      Avanti.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            JOptionPane.showMessageDialog(destro, "Benvenuto!!!",
               "Informazione", JOptionPane.INFORMATION_MESSAGE);
                destro.setBackground(Color.RED);
                destro.paintComponent(destro.getGraphics(),
                           "Questa scritta appare un attimo e scompare");
         }
      });
      destro.add(Avanti);
      frame.getContentPane().add(sinistro);
      frame.getContentPane().add(destro);
      frame.setVisible(true);
   }
   public static void main(String args[])
   {
      //Schedule a job for the event-dispatching thread:
      //creating and showing this application's GUI.
      javax.swing.SwingUtilities.invokeLater(new Runnable()
      {
         public void run()
         {
            Prova ciccio = new Prova();
            ciccio.createAndShowGUI();
          }
      });
   }
}
   class disegno extends JPanel
   {
      public disegno()
      {
         setBackground(Color.BLUE);
      }
      public void paintComponent(Graphics g)
      {
         super.paintComponent(g);
         Graphics2D g1 = (Graphics2D) g;
         g1.setColor(Color.WHITE);
         g1.drawString("EBRACADEBRA", 200, 75);
      }
 public void paintComponent(Graphics g,String s)
      {
         super.paintComponent(g);
         Graphics2D g1 = (Graphics2D) g;
         g1.setColor(Color.BLACK);
         g1.drawString(s, 100, 175);
      }
   }

Penso che il problema sia paintComponent
infatti tu hai definito i metodi
1) public void paintComponent(Graphics g)
2) public void paintComponent(Graphics g,String s)
il fatto e' che 1) viene chiamata automaticamente dal framework
(swing) e quindi sovrascrive quello che tu disegni in 2).
Ti consiglio di sostituire 2) con qualcosa di questo tipo
   private void impostaStringa( String s )
e invece di chiamare 2) chiami:
   destro.impostaStringa( "Questa non scompare" );
   destro.repaint();
esempio:
public class Prova
{
   String m_stringa = "stringa iniziale";
   ...
   private void impostaStringa( String s ) {
     m_stringa = s;
   }
   public void paintComponent( Graphics g ) {
     ...
     g1.drawString( s, 100, 175 );


     g1.drawString( s, 100, 175 );
       // giusto
       g1.drawString( m_stringa, 100, 175 );


Grazie molto