
Originariamente inviata da
G2000
Allora, il codice che ho scritto fino ad ora è questo:
Prima di tutto ricordati di inserire il codice all'interno dei tag [CODE] per mantenerlo ben formattato.
Poi alcune indicazioni da tenere a mente: è sempre bene utilizzare le convenzioni del linguaggio Java per il nome di classi e variabili: in particolare nelle classi è bene utilizzare una lettera maiuscola per ogni parola composta (nel tuo caso "classe_grafico" viene tipicamente scritta come "ClasseGrafico"), mentre le variabili dovrebbero iniziare con la minuscola, ed avere nomi significativi, quindi potresti utilizzare un nome come "panel" o "myPanel" al posto di "A".

Originariamente inviata da
G2000
Su un altro frame devo posizionare un tasto ed una casella di testo.
Il valore scritto nella casella di testo deve poi essere utilizzato come coordinata di posizionamento del primo cerchio (x), mentre quando premo il tasto si deve aprire il frame con sopra il disegno.
Questa parte è relativamente facile, come dicevo: il frame che richiedi ha pochi componenti e deve avere come variabili il JTextField per poter accedere al testo quando viene cliccato il bottone (in realtà non è strettamente necessario se usi una Nested Class come ActionListener, ma per ora eviterei...) e sarebbe una buona cosa che avesse come variabile anche il frame in cui disegni la macchina.
In questo modo alla pressione del bottone potresti fare due cose: se il frame con la macchina non è ancora stato creato lo crei da 0, se invece esiste già aggiorni la posizione della macchina passando al pannello corrispondente il valore inserito nel JTextField.
Ti ho scritto un esempietto stupido di come potresti fare quanto dico sopra: in particolare mi pare sensato che la coordinata x del primo cerchio venga memorizzata nel pannello e che tutte le altre figure abbiano le coordinate riferite a tale x (ho fatto solo una modifica veloce al tuo paintComponent, le linee sopra alla macchina dovrebbero essere posizionate con più attenzione, cambia tu questa parte
)
codice:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MainFrame extends JFrame
{
private ClasseGrafico classeGrafico;
private JTextField textField;
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run(){
new MainFrame().setVisible(true);
}
});
}
public MainFrame()
{
super("Gestore Automobile");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
Container pane=getContentPane();
pane.add(new JLabel("Imposta l'ascissa del primo cerchio: "),BorderLayout.WEST);
pane.add(textField=new JTextField("100",15),BorderLayout.EAST);
JButton button=new JButton("Aggiorna Pannello");
button.addActionListener(new ButtonListener());
pane.add(button,BorderLayout.SOUTH);
pack();
setLocationRelativeTo(null);
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String text=textField.getText();
try
{
int x = Integer.valueOf(text);
if(classeGrafico==null)(classeGrafico=new ClasseGrafico(x)).setVisible(true);
else classeGrafico.updatePanel(x);
}
catch(NumberFormatException ex){
// Il valore inserito nel JTextField non è corretto, scegli cosa fare ...
}
}
}
}
class ClasseGrafico extends JFrame
{
private MioPanel panel;
public ClasseGrafico(int x)
{
super("Disegna auto");
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().add(panel=new MioPanel(x));
setPreferredSize(new Dimension(500,420));
setLocation(100,200);
setResizable(true);
pack();
panel.repaint();
}
public void updatePanel(int x)
{
panel.setX(x);
panel.repaint();
}
class MioPanel extends JPanel
{
private int x;
private Font font=new Font("Times Roman",Font.BOLD,20);
public MioPanel(int x){
this.x=x;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setFont(font);
g.fillOval(x,220,60,60);
g.fillOval(x+200,220,60,60);
g.setColor(Color.blue);
g.drawRect(x-70,150,400,70);
g.drawLine(x-110,10,20,20);
g.drawLine(x+210,150,300,100);
g.drawLine(x+180,100,200,100);
g.setColor(Color.yellow);
g.fillRect(x-70,170,20,30);
g.setColor(Color.red);
g.fillRect(x+310,150,20,30);
g.setColor(Color.cyan);
g.drawString("Automobile",x+180,100);
}
public void setX(int newValue)
{
x=newValue;
}
}
}
Torna pure per qualsiasi dubbio