PDA

View Full Version : [JAVA]esercizio


IspiCiosa
08-04-2008, 19:13
RAgazzi qualcuno mi dà qualche dritta/suggerimento per fare questo esercizio??:

Progettate una applicazione per disegnare semplici forme geometriche su un pannello.
L’applicazione apre una finestra con due pulsanti ed un pannello per il disegno. I due pulsanti sono allineati sul fondo della finestra, mentre il pannello occupa tutta la parte superiore. Le etichette dei due pulsanti raffigurano un rettangolo ed un cerchio, rispettivamente. Il pannello reagisce ai click del mouse disegnando una figura nella posizione sulla quale avviene il click.

I due pulsanti controllano il disegno, nel senso seguente:

• il pannello disegna la figura corrispondente al pulsante che è stato clicked per ultimo.

• se l’utente non ha ancora selezionato alcun pulsante, un click sul pannello causa la comparsa di un MessageDialog con un messaggio che chiede di selezionare una figura

thanks

wizard1993
08-04-2008, 20:15
http://www.hwupgrade.it/forum/showthread.php?t=1631648

andbin
08-04-2008, 20:20
Il pannello reagisce ai click del mouse disegnando una figura nella posizione sulla quale avviene il click.Innanzitutto è chiaro che ti conviene creare un componente apposito, estendendo JComponent o JPanel. Il tuo componente al suo interno dovrà avere una "collezione" di oggetti che descrivono le forme geometriche. Nel metodo dedicato al paint del componente dovrai scorrere la collezione e disegnare le figure una per una. Quando fai click sul componente, aggiungi la figura alla collezione e fai il repaint del componente.

Visto che parli di rettangoli e cerchi, figure semplici cioè, allora puoi usare una collezione di java.awt.Shape ed usare le classi Rectangle2D.Float e Ellipse2D.Float. Essendo degli Shape, puoi facilmente disegnarli su un Graphics2D.

• il pannello disegna la figura corrispondente al pulsante che è stato clicked per ultimo.Allora per i due pulsanti puoi usare due JToggleButton, aggiunti entrambi (oltre che nel container) anche in un ButtonGroup. In questo modo solamente uno per volta resta "premuto".
Sarebbe una soluzione ottimale, nel tuo caso.

IspiCiosa
16-04-2008, 18:38
package esercitazione3;

/**
*
*
*/
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;


import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Main {


public static void main(String[] args) {



final RectangleComponent component = new RectangleComponent();

// Registra il listener

class MousePressListener implements MouseListener
{

public void mousePressed(MouseEvent event) {
int x = event.getX();
int y = event.getY();
component.moveTo(x, y);
}

// Do-nothing methods
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}




}

MouseListener listener = new MousePressListener();
component.addMouseListener(listener);


JButton button = new JButton ("premi qui");
final JLabel label = new JLabel("bravo");

JPanel panel = new JPanel();
panel.add(button);
// panel.add(label);





JFrame frame = new JFrame();
frame.add(component);
frame.add(panel);



frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setTitle("Esercitazione 3");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private static final int FRAME_WIDTH = 300;
private static final int FRAME_HEIGHT = 400;


}





cosa cè di sbagliato??

perchè se nonn inserisco il bottone il rettangolo funziona...
invece quando metto il bottone visualizzo solo quello??

è giusto come sto facendo?

banryu79
17-04-2008, 08:54
cosa cè di sbagliato??

perchè se non inserisco il bottone il rettangolo funziona...
invece quando metto il bottone visualizzo solo quello??

è giusto come sto facendo?

Forse potresti postare anche la tua classe RectangleComponent così diamo un occhio al codice dove fai il rendering.

Comunque il bottone "button" cosa dovrebbe fare? Non mi sembra sia stato definito un metodo che ne gestisca l'Action...

Prova a spiegarci in modo più dettagliato le tue intenzioni.

Ciao :)

IspiCiosa
17-04-2008, 19:13
le mie intenzioni sono di fare l'esecizio del 1 post

il programma come l'ho postato fa apparire un rettangolo che cliccando su un punto qualsiaasi del pannello il rettangolo viene ridisegnato...
ora vorrei che in basso ci siano 2 pulsanti se clicco su uno e poi sul pannello viene disegnato un rettangolo se premo l'altro pulsante e poi sul pannello mi disegna un cerchio ..

per ora ho fatto che se premo sul pannelo mi disegna un rettangolo ma appena metto un pulsante mi appare solo il pulsante....

IspiCiosa
17-04-2008, 20:22
questo è rectangle component


package esercitazione3;


import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;


public class RectangleComponent extends JComponent {


public RectangleComponent()
{
// Il rettangolo disegnato da paintComponent
box = new Rectangle(BOX_X, BOX_Y, BOX_WIDTH, BOX_HEIGHT);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.draw(box);
}

/**
Sposta il rettangolo alla posizione specificata.
@param x l’asciassa della nuova posizione
@param y l’ordinata della nuova posizione
*/
public void moveTo(int x, int y)
{
box.setLocation(x, y);
repaint();
}


private Rectangle box;
private static final int BOX_X = 100;
private static final int BOX_Y = 100;
private static final int BOX_WIDTH = 20;
private static final int BOX_HEIGHT = 30;
}

IspiCiosa
25-04-2008, 19:41
up con urgenza

questo è il codice


package javaapplication9;

import javax.swing.*;
import java.awt.*;
import java.awt.Color.*;
import java.awt.event.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent.*;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.*;
import java.awt.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Color.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.*;


public class Main extends JFrame
{

class NorthPanel extends JPanel
{
private JTextField textField;

public NorthPanel()
{
textField = new JTextField("Premi il pulsante relativo per disegnare la figura");

textField.setEditable(false);
setLayout(new GridLayout(1,0));
setBorder(BorderFactory.createEmptyBorder(10,4,10,4));
add(textField);
}
}
class CenterPanel extends JPanel
{



public CenterPanel()
{
setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder(200,200,200,200));
setBackground(Color.WHITE);
Rectangle box = new Rectangle();

MousePressListener l = new MousePressListener();


Panel p = new Panel();
p.addMouseListener(l);


}


}
class SouthPanel extends JPanel
{
private JButton okButton;
private JButton cancelButton;

public SouthPanel()
{
okButton = new JButton("[]");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try
{


}
catch (Exception ex)
{ }
}
});
cancelButton = new JButton("O");

setLayout(new FlowLayout(FlowLayout.CENTER));
add(cancelButton);
add(okButton);
}
}

private JPanel northPanel;
private JPanel centerPanel;
private JPanel southPanel;

public Main()
{
super("Esercitazione3");

JPanel northPanel = new NorthPanel();
JPanel centerPanel = new CenterPanel();
JPanel southPanel = new SouthPanel();




setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.NORTH,northPanel);
getContentPane().add(BorderLayout.CENTER,centerPanel);


getContentPane().add(BorderLayout.SOUTH,southPanel);



pack();
setVisible(true);

}


public static void main(String argv[])
{


// imposta il Look&Feel di sistema
try
{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {}

Main se = new Main();
}

final RectangleComponent component = new RectangleComponent();


private static final int BOX_X = 100;
private static final int BOX_Y = 100;
private static final int BOX_WIDTH = 20;
private static final int BOX_HEIGHT = 30;

class MousePressListener implements MouseListener{

public void mousePressed(MouseEvent event)
{

JOptionPane.showMessageDialog(null, "Operazione Eseguita", "Eseguito", JOptionPane.INFORMATION_MESSAGE);



/*int x = event.getX();
int y = event.getY();
component.moveTo(x, y);*/
}

// Do-nothing methods
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}






}





al click del mouse sulla parte centrale dovrenne saltar fuori il message dialog ma non succede niente perchè? cosa sbaglio??

la classe rectanglecomponent è la stassa di sopra...

grazie

IspiCiosa
25-04-2008, 20:20
ragazzi cosa sbaglio in questo codice???



package javaapplication9;

import javax.swing.*;
import java.awt.*;
import java.awt.Color.*;
import java.awt.event.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent.*;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.*;
import java.awt.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Color.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.*;


public class Main extends JFrame
{

class NorthPanel extends JPanel
{
private JTextField textField;

public NorthPanel()
{
textField = new JTextField("Premi il pulsante relativo per disegnare la figura");

textField.setEditable(false);
setLayout(new GridLayout(1,0));
setBorder(BorderFactory.createEmptyBorder(10,4,10,4));
add(textField);
}
}
class CenterPanel extends JPanel
{



public CenterPanel()
{
setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder(200,200,200,200));
setBackground(Color.WHITE);


MousePressListener l = new MousePressListener();
component.addMouseListener(l);

JPanel p=new JPanel();
setContentPane(p);


p.add(component);
p.addMouseListener(l);
p.add(component);

}


}
class SouthPanel extends JPanel
{
private JButton okButton;
private JButton cancelButton;

public SouthPanel()
{
okButton = new JButton("[]");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try
{


}
catch (Exception ex)
{ }
}
});
cancelButton = new JButton("O");

setLayout(new FlowLayout(FlowLayout.CENTER));
add(cancelButton);
add(okButton);
}
}

private JPanel northPanel;
private JPanel centerPanel;
private JPanel southPanel;

public Main()
{
super("Esercitazione3");

JPanel northPanel = new NorthPanel();
JPanel centerPanel = new CenterPanel();
JPanel southPanel = new SouthPanel();




setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.NORTH,northPanel);
getContentPane().add(BorderLayout.CENTER,centerPanel);


getContentPane().add(BorderLayout.SOUTH,southPanel);



pack();
setVisible(true);

}


public static void main(String argv[])
{
final RectangleComponent component = new RectangleComponent();

// imposta il Look&Feel di sistema
try
{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {}


Main se = new Main();


}

final RectangleComponent component = new RectangleComponent();

private static final int disegno = 1;



class MousePressListener implements MouseListener{

public void mousePressed(MouseEvent event)
{
if (disegno == 0)
JOptionPane.showMessageDialog(null, "Devi premere il pulsante con la figura da disegnare", "Errore", JOptionPane.INFORMATION_MESSAGE);

//if (disegno == 1){
int x = event.getX();
int y = event.getY();
component.moveTo(x, y);
// }

}


// Do-nothing methods
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}






}



la classe rettangolo è la stessa postata un po piu sopra sui primi post....

perchè non mi visualizza il rettangolo ???