Dopisanie akcji do JLabel

0

Hej

Mam kilka pyta na które nie mogę znaleźc odpowiedzi w żadnym poradniku:

  1. Do przypisania akcji do przycisku używam kodu:
public void actionPerformed(ActionEvent arg0) 
	{
		Object Źródło = arg0.getSource();
		if (Źródło==przycisk)
		{
		wyświetlacz.setText(new Date().toString());

Jak dopisać/wyświetlić to i inne akcje?:

test.addMouseListener(new MouseListener()
		{

			public void mouseClicked(MouseEvent e) {
				System.out.println(ikona2);

O ile jest to dobrze skonstruowane.

Wcześniej deklaruje oczywiście "ikona2"-podaję ścieżkę.

  1. Czy jest jakiś poradnik tego typu tutaj który opisywał by rozwiązanie moich tego typu problemów. W tym średnio potrafię się odnaleźć.

EDIT: Ogólnie chodzi mi o to jak dodać mouseClicked, mouseEntered, mouseExited, ... do mojego actionPerformed - żeby było to wyświetlane w JFrame.

0

Tak zamotałeś, że mało co rozumiem, a nie chce mi się zgadywać :)

Pokaż kod jeśli nie jest on jakiś gigantyczny i napisz co chcesz dokładnie w którym miejscu osiągnąć.

Edit: po zastanowieniu uznaje, że interfejs ActionListener masz na JFrame i w actionPerformed sprawdzasz, na którym obiekcie wywołana została akcja.

Poźniej dodałeś mouseListenera do jakiegoś obiektu i tu nie wiem co chcesz osiągnąć? Powinieneś zaimplementować wszystkie metody z mouseListera.

//metoda wywoływana, gdy następuje kliknięcie, czyli wciśnięcie i zwolnienie przycisku myszy, ale uwaga, obie te operacje muszą zajść w jednym położeniu.
public void mouseClicked(MouseEvent event)

//metoda wywoływana, gdy zostaje wciśnięty przycisk myszy\
public void mousePressed(MouseEvent event)

//metoda wywoływana, gdy następuje zwolnienie przycisku myszy
public void mouseReleased(MouseEvent event)

//metoda wywoływana, gdy kursor pojawia się w obszarze nasłuchującym na zdarzenia, na przykład panelu
public void mouseEntered(MouseEvent event)

//metoda wywoływana, gdy kursor opuszcza obszar nasłuchujący zdarzenia
public void mouseExited(MouseEvent event)

Czytaj więcej na:
http://javastart.pl/grafika_awt_swing/obsluga-zdarzen-mysz/#ixzz2XsSwLoPQ
http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

zamiana znacznika <quote> na <code class="java"> - fp

0

Chodzi mi o to że jak mam wiele przycisków (JButton) w konstruktorze i chce im dodać akcje (tak się to chyba nazywa) to robię tak, że:

public void actionPerformed(ActionEvent arg0) 
	{
		Object Źródło = arg0.getSource();
		if (Źródło==przycisk)
		{
		wyświetlacz.setText(new Date().toString());
		//System.out.println(new Date());
		} 

I dzięki temu widzę datę w moim JRameie a nie w Konsoli Eclipse.

I teraz to czego nie umiem zrobić - zależało mi żeby mieć ikonkę jako przycisk bez tego charakterystycznego obramowania więc użyłem JLabel i dodałem do tego MouseListener.
Kod wygląda tak:

test = new JLabel (ikona2);
		test.setBounds(250, 200, 100, 100);
		add(test);
		test.addMouseListener(new MouseListener()
		{

			public void mouseClicked(MouseEvent e) {
				System.out.println(ikona2);
				
			}

			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void mousePressed(MouseEvent e) {
				 System.out.println("Kliknąłeś w obrazek");
				
			}

			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}});
 

Działa to w ten sposób, że kiedy kliknę w to pole to informacja "Kliknąłeś w obrazek" wyświetla mi się w Konsoli Eclipse a nie w moim JFrame. Sedno sprawy polega na tym, że nie wiem jak dodać JLabel i efekty z MouseListener żeby wyświetlały się zmiany w moim JFrame. Tak samo mouseClicked gdzie mam ustawioną "ikona2" wyświetla mi jedynie wcześniej zadeklarowaną ścieżkę do tej ikony w konsoli Eclipse.

Mam nadzieje, że teraz jest bardziej zrozumiałe.

0

Tak samo mouseClicked gdzie mam ustawioną "ikona2" wyświetla mi jedynie wcześniej zadeklarowaną ścieżkę do tej ikony w konsoli Eclipse.

no a co niby to miałoby innego robić jak używasz System.out.println() ?

Jak chcesz wyświetlać to na tym Twoim wyświetlaczu to tak jak poprzednio wyświetlacz.setText("text"); tyle, że kod znajdzie się w mousePressed.
Rozumiem, że problem w tym, że nie możesz dostać się do zmiennej wyswietlacz?

btw. nie używaj polskich znaków w nazwach zmiennych

0

Właśnie jak w "actionPerformed" dodam kolejnego "else if":

		
else if (Źródło==test)
		{
			wyświetlacz.setText(ikona2);
		} 

To domyślam się, że nie tak powinno to wyglądać. Jak to rozwiązać? Mam mouseEntered, mouseClicked, ... Trzeba jej jakoś ponazywać? I jak je dodać do "actionPerformed", a może robi się to inaczej?

0

ale co niby chcesz w tym oknie wyświetlić?
setText ustawi tekst, co innego ma ustawić?

0

Chcę, żeby w oknie były widoczne akcje z MouseListener, czyli zmiana obrazka na inny po np. kliknięciu. A jak mam w tej postaci to pokazuje mi jedynie źródło obrazka i to w konsoli Eclipse.

0

Dodaj MouseListenera do obiektu typu JLabel, ten listener nie ma nic wspólnego z metodami actionPerformed.

label.addMouseListener(new MouseAdapter()
{
      public void mouseClicked(MouseEvent me)
      {
           wyswielacz.setText("O cholera");
      }
});

Jak użyjesz klasy MouseAdapter, to nie musisz implementować wszystkich metod.

0
bogdans napisał(a):

Dodaj MouseListenera do obiektu typu JLabel, ten listener nie ma nic wspólnego z metodami actionPerformed.

Dodałem ale efekt jak pisałem wyżej jest widoczny tylko w konsoli eclipse a ja chce żeby akcje z MouseListenera były widoczne w moim JFrame i stąd myślałem, że tego JLabel z MouseListenerem trzeba jakoś dodac do actionPerformed tak jak robię zawsze z JButtonami...

Da się to jakoś zrobić?

0

No to raczej musisz dodać do Frame'a JtextArea na którym to wyświetlisz, możesz go nawt nazwać wyświetlacz jak napisał bogdans.

 
JTextArea wyświetlacz = new ...
wyświetlacz.setText("Ja pierdykam!"); 
0

Robię tak jak mówicie, załączam cały kod:

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Date;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;


public class JotFrame extends JFrame implements ActionListener
{
	JButton przycisk, przycisk2, przycisk3;
	JLabel wyświetlacz;
	JLabel ludek, test;
	JTextArea w2;
	
	public JotFrame()
	{
		setSize(800, 600);
		setTitle("Tytuł");
		setLayout(null);
		
		ImageIcon ikona = new ImageIcon("X:\\java\\Testy\\src\\ludzik2.PNG");
		final ImageIcon ikona2 = new ImageIcon("X:\\java\\Testy\\src\\1.gif");
		
		przycisk = new JButton(ikona);
		przycisk.setBackground(Color.white);
		przycisk.setBounds(50, 50, 100, 100);
		add(przycisk);
		przycisk.addMouseListener(new MouseListener()
		{

			public void mouseClicked(MouseEvent e) {
				
				
				System.out.println("Kliknąłeś w obrazek");
				
			}

			public void mouseEntered(MouseEvent e) {
				
				System.out.println(ikona2);
				
				
			}

			public void mouseExited(MouseEvent e) {
				
				
				System.out.println("exited");
				
			}

			public void mousePressed(MouseEvent e) {
				 System.out.println("Przytrzymałeś");
				
			}

			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
		}}
				);
		przycisk.addActionListener(this);
		przycisk.setBorder(null);
		
		przycisk2 = new JButton("Wyjście");
		przycisk2.setBounds(150, 50, 100, 100);
		add(przycisk2);
		przycisk2.addActionListener(this);
		
		wyświetlacz = new JLabel ("Data:");
		wyświetlacz.setBounds(50, 200, 500, 300);
		wyświetlacz.setForeground(Color.red);
		wyświetlacz.setFont(new Font ("SensSerif", Font.BOLD, 20));
		add(wyświetlacz);
		
		przycisk3 = new JButton("test");
		przycisk3.setBounds(300, 200, 100, 100);
		add(przycisk3);
		przycisk3.addActionListener(this);
		przycisk3.setVisible(false);
		
		w2 = new JTextArea ();
		w2.setBounds(500, 500, 100, 100);
		
		
		
		
		test = new JLabel (ikona2);
		test.setBounds(200, 200, 100, 100);
		add(test);
		test.addMouseListener(new MouseListener()
		{

			public void mouseClicked(MouseEvent e) {
				
				
				System.out.println("Kliknąłeś w obrazek");
				
			}

			public void mouseEntered(MouseEvent e) {
				
				System.out.println(ikona2);
				
				
			}

			public void mouseExited(MouseEvent e) {
				
				
				System.out.println("exited");
				
			}

			public void mousePressed(MouseEvent e) {
				 System.out.println("Przytrzymałeś");
				
			}

			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}});
		
	
	
}
		
	public static void main(String[] args) 
	{
		JotFrame okno = new JotFrame();
		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		okno.setVisible(true);
	}

	public void actionPerformed(ActionEvent arg0) 
	{
		Object Źródło = arg0.getSource();
		if (Źródło==przycisk)
		{
		wyświetlacz.setText(new Date().toString());
		//System.out.println(new Date());
		}
		else if (Źródło==przycisk2)
		{
			dispose();
		}
		else if (Źródło==przycisk3)
		{
		wyświetlacz.setText(new Date().toString());
		}
		else if (Źródło==test)
		{
			test.setVisible(true);
			
			w2.setText(ikona2);
		}
	}}
 

Próbowałem już dodać MouseListener do JButtona ale też nic nie wychodzi....

EDIT: Rozumiem, że MouseListener nie ma związku z actionPerformed (choć nie wiem czemu ale powiedzmy że rozumiem) i logicznie myśląc dochodzę do wniosku, że przy moim "JLabel" brakuje "addActionListener(this)" tylko, że eclipse mówi mi, że "The method addActionListener(JotFrame) is undefined for the type JLabel".
EDIT: setText jak się domyślam jest do tekstu a jak wyświetlić obraz?

0
przycisk.addMouseListener(new MouseListener()
{
   public void mouseClicked(MouseEvent e) {
      System.out.println("Kliknąłeś w obrazek");
       wyświetlacz.setText("dsadsa");
   }

  .
  .
  .

}

działa...

Inna sprawa, że wywołuje się actionPerformed i mouseClicked

0
Swr napisał(a):

...

działa...

Inna sprawa, że wywołuje się actionPerformed i mouseClicked

A czemu JButton musi być w actionPerformed a mouseClicked już nie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1