wyswietlanie wartosci zmiennej

0

Mam taki kawałek kodu

import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;

class Test 
{
	public static void main(String[] args) 
	{
		Ramka ramka= new Ramka();
		ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ramka.show();

		//mierzenie czasu
		ActionListener sluchacz = new Zegar();
		Timer t = new Timer(1000,sluchacz);
		t.start();
	} 
}

class Ramka extends JFrame
{
	public Ramka()
	{
		Toolkit zestaw = Toolkit.getDefaultToolkit();
		setTitle("Zegar");
		setSize(500,350);
		setLocation(200,100);
		setResizable(false);

		//dodaj PanelZegar
		PanelZegar panelz = new PanelZegar();
		Container zawartosc2 = getContentPane();
		panelz.setBackground(Color.white);
		zawartosc2.add(panelz);
	}
}

class PanelZegar extends JPanel
{
	public PanelZegar()
	{
		setSize(100,100);
		setLocation(170,0);
		
	}

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

		Zegar czas = new Zegar();
		czas.rysuj(g);
	}
}

class Zegar implements ActionListener
{
	public Zegar()
	{
	}
    
    public void actionPerformed(ActionEvent zdarzenie)
	{
		GregorianCalendar p = new GregorianCalendar();
		sekundyTeraz = p.get(Calendar.SECOND);
		minutyTeraz = p.get(Calendar.MINUTE);
		godzinyTeraz = p.get(Calendar.HOUR_OF_DAY);
		//System.out.println("sekunda " + sekundyTeraz);
	}

	
	public void rysuj(Graphics g)
	{
		g.drawString("Sekunda" + sekundyTeraz,300,300);
		
	}

	

	private int sekundyTeraz;
	private int minutyTeraz;
	private int godzinyTeraz;
}

Jak mam zrobic, aby funkcja rysuj wyswietlała mi co sek.nową wartośc zmiennej ekundyTeraz??

0

Trochę to przebudowałem, trochę uprościłem, trochę zrobiłem po swojemu... no i działa.

import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;

public class Ramka extends JFrame {
    public Ramka() {
        setTitle("Zegar");
        setSize(500,350);
        setLocation(200,100);
        setResizable(false);
        
        //dodaj PanelZegar
        panelz = new PanelZegar();
        panelz.setBackground(Color.white);
        add(panelz);
    }
    
    public static void main(String[] args) {
        Ramka ramka= new Ramka();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setVisible(true);
        
        //mierzenie czasu
        new Timer(1000, panelz).start();
    }
    
    private static PanelZegar panelz;
}

class PanelZegar extends JPanel implements ActionListener {
    public PanelZegar() {
        setSize(100,100);
        setLocation(170,0);
        
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g;
        
        rysuj(g);
    }
    
    public void actionPerformed(ActionEvent zdarzenie) {
        GregorianCalendar p = new GregorianCalendar();
        sekundyTeraz = p.get(Calendar.SECOND);
        minutyTeraz = p.get(Calendar.MINUTE);
        godzinyTeraz = p.get(Calendar.HOUR_OF_DAY);
        
        rysuj(getGraphics());
        //System.out.println("sekunda " + sekundyTeraz);
    }
    
    public void rysuj(Graphics g) {
        // czyścimy g... na biało
        g.setColor(Color.WHITE);
        g.fillRect(0,0, getWidth(), getHeight());
        
        // przestawiamy kolor na czarny i rysujemy...
        g.setColor(Color.BLACK);
        g.drawString("Sekunda" + sekundyTeraz,300,300);
    }
    
    private int sekundyTeraz;
    private int minutyTeraz;
    private int godzinyTeraz;
}

Problemy były chyba tylko z widocznością zmiennych...
Aha... Nie trzeba już pisać getContentPane().add(). W wersji 1.5 wystarczy już samo add().

Pozdrawiam...

0

Ale ja chce zeby klasa Test była bubliczna a nie Ramka. Wiem ze metoda rysuj "niewidzi" zmiennej sekundyTeraz ale nie wiem jak zrobic zeby widziała;/. Chciałbym, aby uklad klas został bez zmian, bo potem chce dodac więcej paneli itd.

0
samos napisał(a)

Ale ja chce zeby klasa Test była bubliczna a nie Ramka. Wiem ze metoda rysuj "niewidzi" zmiennej sekundyTeraz ale nie wiem jak zrobic zeby widziała;/. Chciałbym, aby uklad klas został bez zmian, bo potem chce dodac więcej paneli itd.

No przecież bez sensu napisałeś te klasy...
Klasa Zegar jest podłączona do timera, a jak ma się ona narysować, skoro rysuje inna klasa - PanelZegar???
Inaczej: elementem graficznym jest PanelZegar, a ty chcesz narysować w klasie Zegar. Spójrz na kod NLE, tam klasa PanelZegar implementuje i Panel i ActionListener, czyli dostaje zawiadomienie od timera i może się sama narysować.

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