Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Forte di soluzioni tecniche specifiche, il notebook Acer TravelMate P4 14 abbina dimensioni compatte e buona robustezza per rispondere alle necessità specifiche degli utenti aziendali. La piattaforma AMD Ryzen 7 Pro assicura prestazioni elevate con i tipici ambiti di produttività personale e sul lavoro, mantenendo un'elevata autonomia.
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-05-2010, 09:48   #1
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
[JAVA] Mouse event

Sto cercando di creare un bottone personalizzato e con questo codice ci sono quasi riuscito:
Codice:

import java.awt.*;
import java.awt.event.*;


import javax.swing.*;

class OvalButton extends JComponent implements MouseListener
{

	private static final long serialVersionUID = 1L;
	
	
public OvalButton()
  {
    super();
    enableInputMethods(false);	
    addMouseListener(this);
    setFocusable(true);
           
  }
  public void setBounds(){
	  this.setBounds(0, 0, 200, 120);
  }

  public void paintComponent(Graphics g)
  {
	  
    super.paintComponent(g);
    Graphics2D antiAlias = (Graphics2D)g;
    antiAlias.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    g.setColor(Color.RED);
    g.fillOval(0, 0, 200, 120);

  }
@Override
public void mouseClicked(MouseEvent e) {
	System.out.println(""+e);
	
}
@Override
public void mouseEntered(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mouseExited(MouseEvent e) {
	// TODO Auto-generated method stub
	
}
@Override
public void mousePressed(MouseEvent e) {
	
}
@Override
public void mouseReleased(MouseEvent e) {
	// TODO Auto-generated method stub
	
}



}
Se andate ad aggiungere il bottone ad un jpanel ho il problema che viene stampato nella console ovunque click del mouse anche fuori dall'ovale, dove ho sbagliato? Cosa Manca?
Vi prego è urgente, devo consegnare un elaborato.
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 10:36   #2
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Potresti postare anche il codice in cui istanzi il button e gli aggiungi un ascoltatore?
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:02   #3
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
visto che il listener già l'ho aggiunto alla classe basta fare:

Ovalbutton button = new OvalButton();
JFrame frame= new JFrame();
frame.add(button);
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:05   #4
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
penso che il problema stia nel fatto che tu vai ad "ascoltare" un qualsiasi click del mouse, non solo i click del mouse sopra al tuo componente...

Ultima modifica di lupoxxx87 : 06-05-2010 alle 16:07.
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:22   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il componente occupa con buona probabilità tutta la superficie del suo contenitore.

C'è un setBounds nel tuo codice che per come è messo corre il rischio di essere irrilevante.

Puoi controllare eliminando quel setBounds e scrivendo una cosa tipo questa:

OvalButton button = new OvalButton();
button.setPreferredSize(new Dimension(200, 120));
JPanel container = new JPanel(new FlowLayout());
container.add(button);
finestra.add(container);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:31   #6
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
grazie delle risposte l'idea del setbounds e del container è buona ma nella console viene stampato click anche fuori dall'ovale mi spiego è come se avessi un bottone rettangolare con l'ovale in mezzo.. sto pensando che sia sbagliato estendere JComponent.. forse dovrei estendere JButton ma poi come faccio a fare l'override sulla forma del bottone?
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:45   #7
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Quote:
Originariamente inviato da Dolcezeus Guarda i messaggi
grazie delle risposte l'idea del setbounds e del container è buona ma nella console viene stampato click anche fuori dall'ovale mi spiego è come se avessi un bottone rettangolare con l'ovale in mezzo.. sto pensando che sia sbagliato estendere JComponent.. forse dovrei estendere JButton ma poi come faccio a fare l'override sulla forma del bottone?
Prima che PGI-Bis scrivesse stavo per scrivere la stessa cosa.

Se vuoi che quel setBounds() abbia un senso (se proprio vuoi), prova a richiamare .setLayout(null) sul panel contenitore dell'OvalButton. Ovviamente così facendo rinunci alle potenzialità dei Layout Manager.

Per renderti conto di quello che sta succendendo, puoi fare così:

1) eredita da JPanel invece che da JComponent
2) nel costruttore scrivi
Codice:
this.setOpaque(true);

//va bene qualsiasi colore che crei contrasto così te ne accorgi
this.setBackground(Color.gray);
3) sorpresa Sicuramente vedrai che l'area del componente è ben maggiore di quella dell'ovale, come ha detto PGI.
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:49   #8
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
ho esposto già la "sorpresa" per piacere aiutatemi devo creare sto maledetto bottone ovale...
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:50   #9
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Forse ora ho capito meglio.

A te dà fastidio che l'area cliccabile sia il rettangolo in cui è inscritto l'ovale e non l'ovale.

Questo è un bel problema. Non credo che con JButton risolvi molto.
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:53   #10
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Al tuo posto, avendo questa esigenza, risolverei il tutto con un controllo sulle coordinate del mouse al click. Se sono all'interno dell'ovale faccio qualcosa, altrimenti niente.

Alessandro
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:54   #11
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
il problema sta nel fatto che l'ovale dovrà spostarsi sullo schermo all'interno di un jFrame ad ogni click
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:57   #12
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Quote:
Originariamente inviato da Dolcezeus Guarda i messaggi
il problema sta nel fatto che l'ovale dovrà spostarsi sullo schermo all'interno di un jFrame ad ogni click
Non fa niente, puoi fare un controllo sulle coordinate RELATIVE all'interno dell'ovale.

Per ottenere le coordinate relative puoi usare i metodi per ottenere la risoluzione dello schermo e le dimensioni della finestra. Il resto sono calcoli...

Se aspetti un minuto vedo se ritrovo il pezzo di codice dove ho calcolato queste coordinate...ho avuto un problema simile un po' di tempo fa.
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:58   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
La verifica la puoi fare anche così:

(Il tuo bottone, con delle dimensioni di default)
Codice:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;


public class OvalButton extends JComponent implements MouseListener
{
    private static final long serialVersionUID = 1L;

    private static final Dimension DEFAULT_SIZE = new Dimension(100, 70);

    public OvalButton() {
        super();
        enableInputMethods(false);
        addMouseListener(this);
        setFocusable(true);
        setVisible(true);

        // size the component
        sizeMe();
    }

    public void sizeMe() {
        setSize(DEFAULT_SIZE);
        setPreferredSize(DEFAULT_SIZE);
        setMinimumSize(DEFAULT_SIZE);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D antiAlias = (Graphics2D)g;
        antiAlias.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        antiAlias.setPaintMode();
        antiAlias.setColor(Color.RED);
        Rectangle rect = getBounds();
        antiAlias.fillOval(1, 1, rect.width-2, rect.height-2);
    }

    @Override
    public void paintBorder(Graphics g) {
        super.paintBorder(g);
        Rectangle rect = getBounds();
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, rect.width-1, rect.height-1);
    }

    @Override public void mouseClicked(MouseEvent e) {
            System.out.println(""+e);
    }
    @Override public void mouseEntered(MouseEvent e) {}
    @Override public void mouseExited(MouseEvent e) {}
    @Override public void mousePressed(MouseEvent e) {}
    @Override public void mouseReleased(MouseEvent e) {}


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("Bottone?");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        OvalButton but = new OvalButton();
        //but.setPreferredSize(new Dimension(140, 90));
        JPanel pan = new JPanel();
        pan.setBorder(new TitledBorder("Pannello"));
        pan.add(but);
        frame.add(pan, BorderLayout.CENTER);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
Questo disegna l'ovale e disegna anche i bordi del componente.
Tutti i click che vanno a finire dentro i bordi del componente (cioè nel componente) vengono "sentiti".

Il fatto è che i componenti sono tutti delle aree rettangolari.

@EDIT:
potresti associare all'area "ovale" del tuo componente una java.awt.Shape. E poi, ad ogni click che il componente riceve, controllare se il click cade dentro la Shape. (Vedi package java.awt.geom).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 06-05-2010 alle 17:01.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 16:59   #14
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
ti ringrazio ma mi sà di una cosa poco "pulita" il mio prof mi ammazzerebbe è che nn sò come cambiare l'aspetto ad un bottone ereditandone tutte le altre ottime proprietà.
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:02   #15
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Mah, potrei anche sbagliarmi, ma non mi pare che si possano personalizzare le forme dei componenti. Non credo che il tuo professore pretenda questo.

Comunque non ho trovato il codice, però ricordo gli "ingredienti" principali:

evt.getYOnScreen()
evt.getXOnScreen()

this.getLocationOnScreen().y
this.getLocationOnScreen().x

evt.getYOnScreen()-this.getLocationOnScreen().y dovrebbe essere già la coordinata Y relativa che ti serve.

EDIT:
una volta risolto il problema delle coordinate relative, l'approccio di banryu79 (analogo a quello che ti ho consigliato ma più elegante dato usi funzioni già pronte con gli Shape) non mi sembra così "sporco" come dici.

Ultima modifica di Sbrizzolo86 : 06-05-2010 alle 17:04.
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:05   #16
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
banryu79 ma non risolvo il problema...
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:06   #17
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Sbrizzolo86 Guarda i messaggi
Mah, potrei anche sbagliarmi, ma non mi pare che si possano personalizzare le forme dei componenti. Non credo che il tuo professore pretenda questo.
Beh, delle strade si trovano sempre -> http://today.java.net/pub/a/today/20...g-windows.html

Però se il suo prof pretende questo, mi sa che non ha le idee chiare
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:11   #18
Sbrizzolo86
Member
 
Iscritto dal: Dec 2009
Messaggi: 46
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Beh, delle strade si trovano sempre -> http://today.java.net/pub/a/today/20...g-windows.html

Però se il suo prof pretende questo, mi sa che non ha le idee chiare
Grandissime AWTUtilities...le usai per creare meravigliosi effetti di trasparenza.
Beh in informatica quasi tutto è possibile, però sto prof ha un po' esagerato.
Sbrizzolo86 è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:12   #19
Dolcezeus
Member
 
Iscritto dal: Jul 2008
Messaggi: 43
io non sono un guro di java ma se la filosofia del riuso e dell'oggetto è quella che si lege nei libri è possibile fare qualsiasi cosa con un componente... solo che io non riesco a capì come...
Dolcezeus è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 17:16   #20
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da Dolcezeus Guarda i messaggi
grazie delle risposte l'idea del setbounds e del container è buona ma nella console viene stampato click anche fuori dall'ovale mi spiego è come se avessi un bottone rettangolare con l'ovale in mezzo.. sto pensando che sia sbagliato estendere JComponent.. forse dovrei estendere JButton ma poi come faccio a fare l'override sulla forma del bottone?
Puoi usare uno Shape (Ellipse2D nel tuo caso). Super-pseudo codice

private Shape shape = new Ellipse2D.Double(0, 0, 200, 120);
...
paintComponent(Graphics g) {...
Graphics2D graphics= (Graphics2D) g;
graphics.fill(shape) o graphics.draw(shape);

Nel tuo mouseClicked verifichi se il punto del click è contenuto nello shape:

if(shape.contains(e.getX(), e.getY()) {
...è stato cliccato il componente E il punto di click è contenuto nello shape.
}

Questo tiene conto della posizione del componente sullo schermo (le coordinate del mouseClick sono relative all'origine del componente).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Xbox: dal prossimo mese verifica dell'id...
Corsair AI Workstation 300: poco pi&ugra...
Addio a Elio Marioli, un pioniere della ...
L'IA sta già diminuendo il potere...
Guida autonoma? Gli ADAS falliscono e in...
Skechers lancia le scarpe per bambini co...
Revolut e Audi F1: un’alleanza rivoluzio...
Gestione attività di Windows 11 d...
Amazon lancia il nuovo videocitofono Bli...
Robot aspirapolvere al top: i nuovi DEEB...
Opera vs Microsoft: la guerra dei browse...
Router e ripetitori FRITZ! in offerta su...
Spotify vola a quota 700 milioni di uten...
Microsoft pronta ad abbandonare il launc...
Windows 11, arriva una feature multimoni...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v