Newsgroup: it.comp.java
Titolo: paint da un JPanel all'altro

Come fare in una classe (Console), che estende JPanel, a far si che un
JButton attivi un paint in un JPanel creato nella classe (Frame)
(e.g. posizionato in BorderLayout.CENTER)  nella quale il JPanel della
classe Console sara' a sua volta posizionato in e.g.
BorderLayout.NORTH?
 
mi sa che ho le idee confuse

Se qualcuno puo' suggerirmi un esempio di interfaccia che gestisce un
paint visualizzato nello stesso frame in cui l'interfaccia e' inserita
(ma in un differente JPanel), sarebbe fantastico.


Stento ancora a capire la situazione in cui ti trovi :)
Mi "sembra" di aver capito che:
- hai 2 JPanel (chiamiamoli jpanelA e jpanelB)
- hai un bottone che si trova nel jpanelA che vorresti che chiamasse 
jpanelB.repaint()
 
Se e' cosi' (ma avro' capito male io perche' mi sembra troppo semplice) 
basta che passi a jpanelA un puntatore a jpanelB o che comunque gli 
rendi il puntatore visibile da qualche parte. Ciao.
 

si probabilmente e' semplice la cosa.. e' solo che su paint ho le idee
confuse... e' solo che essendo il JPanelA in una classe diversa da
quella di JPanelB... mi crea un po di confusione..
Provo a riassumere qui sotto quello che sto facendo (ho tagliuzzato il
codice probabilmente nemmeno funziona, ma spero di averlo reso piu
chiaro
 
 
public class JPanelA  extends JPanel {
	public JPanelA() {
		JButton calculate = new JButton("CALCULATE");
	}
}
 
 
public class MainFrame extends JFrame {
 
	public MainFrame(String title) {
	super(title);
	// set layout manager
	setLayout(new BorderLayout());
 
	// create swing component
	JPanel JPanelB = new JPanel();
 
	DateConsolePanel DateConsolePanel = new DateConsolePanel();
 
	// add swing component
	add(JPanelB, BorderLayout.CENTER);
	add(DateConsolePanel, BorderLayout.NORTH);
 
	}
 
}
 
 
public class App {
 
	public static void main (String[] args) {
		JFrame frame = new MainFrame("x");
 
		frame.setVisible(true);
		}
}
 
 
public class Chart extends JPanel{
 
	public ArrayList<Barra> barraarray = new ArrayList<Barra>();
 
	public Chart(ArrayList<Barra>) throws IOException{
		Interface input = new Interface();
		MakeChartArray uno = new MakeChartArray(input.getPath(),
input.Interface(), 10);
		barraarray = uno.getChart();
	}
 
        public void paintComponent(Graphics gIn){
 
		Graphics2D g = (Graphics2D)gIn;
 
		for (int i = 0; i < lenght; i++) {
 
			Barra barra = barraarray.get(i);
			low = barra.getLow;
			high = barra.getHigh;
			g.fillRect(i, low, 1, high-low);
		}
 
 
Ora vorrei che premendo il bottone CALCULATE mi parta chart() il cui
costruttore usera' dei dati presenti in un textfield per creare l-
array che il paint di class chart mi disegnera' in JPanelB..
 
forse devo semplicemente aggiungere chart come swing component invece
di JPanelB... ma non saprei come lanciarlo dall'evento che avra' il
bottone CALCULATE... uff.. si sono confuso, forse un esempio di
interfaccia simile mi chiarirebbe le idee..
 
scusate sono un programmatore della domenica :D

 interfaccia simile mi chiarirebbe le idee..
Per quanto vedo, estendendo JPanel, Chart e' gia' un JComponent.
 

 chiaro
 
Avere un esempietto anche non funzionante e' ottimo.
 
Basterebbe solo che sia coerente, qui mi sa hai rinominato delle classi 
e ti sei perso dei pezzi importanti.
 
1) la classe JPanelA la vedo descritta ma poi non viene mai utilizzata
2) il JFrame contiene JPanelB e DateConsolePanel che non sono descritti 
da nessuna parte
3) la class Chart come JPanelA e' descritta ma poi non viene utilizzata.
 
Cosi' non riesco a capire purtroppo.

Ciao Coder..
 
si hai ragione ho scritto in fretta e ho dimenticato di rinominare
tutti i DateConsolePanel in JPanelA, che sono quindi la stessa cosa..
provo a scrivere in modo piu' sensato:
(Chart sarebbe la classe che dovrebbe scrivere in JPanelB quando premo
JPanelA e non la inserisco perche' e' l-oggetto della mia domanda...
non saprei al momento davvero come iserirla.. forse devo semplicemete
istanziare chart al posto di JpanelB?)
 
public class JPanelA  extends JPanel {
        public JPanelA() {
                JButton calculate = new JButton("CALCULATE");
                add(calculate);
        }
}
 
public class MainFrame extends JFrame {
        public MainFrame(String title) {
        super(title);
        // set layout manager
        setLayout(new BorderLayout());
        // create swing component
        JPanel JPanelB = new JPanel();
        JPanel JPanelA = new JPanelA();
        // add swing component
        add(JPanelB, BorderLayout.CENTER);
        add(JPanelA, BorderLayout.NORTH);
        }
}
 
public class App {
        public static void main (String[] args) {
                JFrame frame = new MainFrame("x");
                frame.setVisible(true);
                }
}
 
public class Chart extends JPanel{
        public ArrayList<Barra> barraarray = new ArrayList<Barra>();
 
        public Chart() throws IOException{
                MakeChartArray uno = new MakeChartArray(argomento
sara' il contenuto del text field);
                barraarray = uno.getChart();
        }
        public void paintComponent(Graphics gIn){
                Graphics2D g = (Graphics2D)gIn;
                for (int i = 0; i < lenght; i++) {
                        Barra barra = barraarray.get(i);
                        low = barra.getLow;
                        high = barra.getHigh;
                        g.fillRect(i, low, 1, high-low);
                }
        }
}
 
Dr.Ugo dovro' leggere i tuoi cosnigli con piu' calma per capirci
qlcs.. grazie intanto

 istanziare chart al posto di JpanelB?
 
Da come hai descritto la situazione sicuramente si'.
 
Ti riporto un esempio completo, basato sul tuo esempio, e che compila.
Ogni volta che premi il buttone di JPanelA viene disegnata una nuova 
linea in Chart.
 
===========================================================
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
class JPanelA  extends JPanel {
     private Chart chart;
     public JPanelA() {
         JButton calculate = new JButton("CALCULATE");
         calculate.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 if (chart != null)
                     chart.repaint();
             }
         });
         add(calculate);
     }
     public void setChart(Chart chart) {
         this.chart = chart;
     }
}
 
class Chart extends JPanel{
     private int lines = 0;
     public void paintComponent(Graphics g) {
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, getWidth(), getHeight());
         g.setColor(Color.BLUE);
         for (int i = 0; i < lines; i++)
             g.drawLine(0, 10 * i, 800, 10 * i);
         lines++;
     }
}
 
class MainFrame extends JFrame {
     public MainFrame(String title) {
         super(title);
         // set layout manager
         setLayout(new BorderLayout());
         // create swing component
         JPanelA jpanelA = new JPanelA();
         Chart chart = new Chart();
         jpanelA.setChart(chart);
         // add swing component
         add(jpanelA, BorderLayout.NORTH);
         add(chart, BorderLayout.CENTER);
     }
}
 
public class App {
     public static void main(String[] args) {
         JFrame frame = new MainFrame("x");
         frame.setVisible(true);
         frame.setSize(800, 600);
     }
}
 
===========================================================

Fantastico, credo che qui trovero' tutti i building blocks per capire
come funziona quello che cercavo di fare.. ci studio sopra e riporto
 
grazie ancora
