Login: password:
Forgot your password?
ButtonManager
Nella parte inferiore di una finestra ci saranno tre bottoni di controllo: "Aggiungi", "Cancella","Sposta".
Schiacciando il primo verrà aggiunto un bottone con label numeric crescente (inizialmente "1", poi "2", "3"...). Il bottone dovrà essere posizionato in modo casuale dulla finestra, ma non sovrapporsi ai tre bottoni di controllo. I bottoni numerici possono essere sovrapposti tra loro.
Il bottone "Cancella" eliminerà uno dei bottoni numerici, scegliendolo a caso.
Il bottone "Sposta" muoverà altrove uno dei bottoni numerici, scegliendolo a caso.
Chiudendo la finestra'l applicazione dovrà terminare.

package buttonmanager;
import javax.swing.*;
import java.awt.*;
public class FinestraPrincipale extends JFrame{

  public static void main(String[ ] a){
        new FinestraPrincipale();
  }
  public FinestraPrincipale() {
      this.setSize(400,400);
      this.centerInScreen();
       // fai in modo che la chiusura della finestra
    // termini l'applicazione
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
    //
    this.setLayout(new BorderLayout());
    //
    ButtonPanel bp=new ButtonPanel();
    this.add(bp,BorderLayout.CENTER);
    this.add(new ControlPanel(bp),BorderLayout.SOUTH);
    // rendi la finestra visibile
    this.setVisible(true);
  }

  private void centerInScreen() {
    // trova le dimensioni dello schermo e della finestra
    Dimension screenSize =
                 Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = this.getSize();
    // assicurati che la finestra non sia più grande dello schermo
    if (frameSize.height > screenSize.height)
                 frameSize.height = screenSize.height;
    if (frameSize.width > screenSize.width)
                frameSize.width = screenSize.width;
    // centra la finestra nello schermo
    this.setLocation((screenSize.width - frameSize.width) / 2,
                (screenSize.height - frameSize.height) / 2);
  }
}

package buttonmanager;

import java.awt.GridLayout;
import java.awt.LayoutManager;
import javax.swing.JButton;
import javax.swing.JPanel;

public class ControlPanel extends JPanel {
    public static final String CREA="create";
    public static final String CANCELLA="delete";
    public static final String SPOSTA="move";
    private ButtonPanel bp;
    ControlPanel(ButtonPanel bp){
        this.bp=bp;
        this.setLayout(new GridLayout(1,3));
        JButton createButton=new JButton("aggiungi");
        JButton deleteButton=new JButton("cancella");
        JButton moveButton=new JButton("sposta");
        // associa delle stringhe di comando ai bottoni
        createButton.setActionCommand(CREA);
        deleteButton.setActionCommand(CANCELLA);
        moveButton.setActionCommand(SPOSTA);
        // aggiungi i bottoni al pannello
        this.add(createButton);
        this.add(deleteButton);
        this.add(moveButton);
        // aggungi un controller ai bottoni
        ButtonController bc=new ButtonController(bp);
        createButton.addActionListener(bc);
        deleteButton.addActionListener(bc);
        moveButton.addActionListener(bc);
    }
}

package buttonmanager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class ButtonController implements ActionListener{
    ButtonPanel bp;
    ButtonController(ButtonPanel bp){
        this.bp=bp;
    }
    public void actionPerformed(ActionEvent e) {
        String command=e.getActionCommand();
        if (command.equals(ControlPanel.CREA)) bp.addButton();
        else if (command.equals(ControlPanel.CANCELLA)) bp.removeButton();
        else if (command.equals(ControlPanel.SPOSTA)) bp.moveButton();
    }

}

package buttonmanager;

import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JPanel;

class ButtonPanel extends JPanel{
    LinkedList buttonList;
    int nextButtonLabel=1;
    final int BUTTONWIDTH=60;
    final int BUTTONHEIGHT=20;
    Random rg=new Random();
    public ButtonPanel() {
        this.setLayout(null);
        this.setBackground(Color.GREEN);
        buttonList=new LinkedList();
    }
    private Point generateRandomPoint(){
        int x=rg.nextInt(this.getWidth()-BUTTONWIDTH);
        int y=rg.nextInt(this.getHeight()-BUTTONHEIGHT);
        return new Point(x,y);
    }
    public void addButton(){
        JButton b=new JButton(" "+(nextButtonLabel++)+" ");
        b.setLocation(generateRandomPoint());
        b.setSize(BUTTONWIDTH,BUTTONHEIGHT);
        this.add(b);
        this.repaint();
        buttonList.add(b);
    }
    private Component selectElement(){
        int numElem=buttonList.size();
        if (numElem>0) {
            Component o=(Component)buttonList.get(rg.nextInt(numElem));
            return o;
        } else return null;
    }
    public void removeButton(){
        Component c=selectElement();
        if (c!=null) {
            buttonList.remove(c);
            this.remove((Component)c);
            this.repaint();
        }
    }
    void moveButton() {
        Component c=selectElement();
        if (c!=null) {
            Point p=generateRandomPoint();
            c.setLocation(p);
            this.repaint();
        }
    }

}



powered by segue
segue_logo