Problemas y dudas Thread e interfaces

Primero que nada buenos dias,este es mi problema, tengo que hacer un cronometro usando obligatoriamente estas clases:
clase entidad= aqui se guardan las variables horas, minutos ,segundos junto con sus getters and setter.
clase vista = donde se crea la interfaz grafica del cronometro y aqui se implementa la interface
interface interfaz, con este se debe conectar la vista con la clase logica
clase logica = aqui se realizaran los calculos delcronometro y aqui se implementara runnable y la interface
Bien , se supone que en la vista se llamaran a los metodos de logica para usar los threads en logica y y asi calcule cada segundo que pase, pero para imprimirlos en lainterfaz debo mandarselo por medio de la interface a laclase entidad y que la vista los muestre en la interfaz grafica, pero esto mandando un objeto de entidad mediante la interface, sin embargo no se como hacer eso , no tengo ni la menor idea de como hacer de como mandar un objeto entidad a traves de la interface y que me lo muestre en interfaz grafica, ademas de que los threads no me estan funcionando tampoco, en fin.. gracias por su atencion.

Y aqui esta mi codigo:

package threads;

public class Main {

public static void main(String[] args) {

Vista croni=new Vista();
}

}

package threads;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Vista extends JFrame implements Interfaz {

Logica logica = new Logica();
Entidad entidad = new Entidad();
JLabel tiempo;
JButton iniciar;
JButton detener;
JButton reanudar;
JButton reiniciar;

public Vista()
{
setTitle("Super Cronometro");
setSize( 400, 150 );
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setVisible(true);

tiempo = new JLabel( "00:00:00" );
tiempo.setFont( new Font( Font.SANS_SERIF, Font.BOLD,55));
tiempo.setHorizontalAlignment( JLabel.CENTER );
tiempo.setForeground( Color.BLACK );

add( tiempo, BorderLayout.NORTH);

final JButton iniciar = new JButton( "Iniciar" );
iniciar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
iniciar.setEnabled(false);
logica.iniciarCronometro();
}
});

JButton detener = new JButton( "Detener" );
detener.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
iniciar.setEnabled(true);
logica.detenerCronometro();
}
});

JButton reanudar = new JButton( "Reanudar" );
reanudar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){

}
});
JButton reiniciar = new JButton( "Reiniciar" );
reiniciar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){

}
});

JPanel panelBoton = new JPanel();
panelBoton.setLayout(new GridLayout(1,4,4,4));
panelBoton.add(iniciar);
panelBoton.add(detener);
panelBoton.add(reanudar);
panelBoton.add(reiniciar);
add(panelBoton, BorderLayout.CENTER);
}

public void segundero(Entidad logica) {

tiempo.setText(entidad.getHoras() +":"+
entidad.getMinutos() +":"+entidad.getSegundos());
}
}

package threads;

public interface Interfaz {

public void segundero(Entidad logica);

}

package threads;

public class Entidad {

private String segundos="00";
private String minutos="00";
private String horas="00";

public String getSegundos()
{
return segundos;
}

public void setSegundos(String segundos)
{
this.segundos = segundos;
}

public String getMinutos()
{
return minutos;
}

public void setMinutos(String minutos)
{
this.minutos=minutos;
}

public String getHoras()
{
return horas;
}

public void setHoras(String horas)
{
this.horas = horas;
}
}

package threads;

public class Logica implements Runnable,Interfaz{

boolean cronometroActivo;
Thread hilo;
int horas=0;
int min = 0;
int seg = 0;
String hora;
String minutos;
String segundos;

public void segundero(Entidad entidad) {

}

public void run() {

try
{

while(cronometroActivo)
{
System.out.println("a");
Thread.sleep(60000);
seg++;

if(seg == 60)
{
seg = 0;
min ++;

if(min == 60)
{
min=0;
horas++;
}
}

if(horas<10)
{
hora = "0"+ Integer.toString(horas);
}
else
{
hora = Integer.toString(horas);
}

if(min<10)
{
minutos = "0"+ Integer.toString(min);
}
else
{
segundos = Integer.toString(seg);
}
System.out.println(hora+":"+minutos+":"+segundos);

}

}catch(Exception e){
System.out.println(hora+":"+minutos+":"+segundos);
}
}

public void iniciarCronometro(){
cronometroActivo = true;
hilo = new Thread(new Logica());
//System.out.println("a");
hilo.start();
}

public void detenerCronometro()
{
cronometroActivo = false;
hora="0";
minutos="0";
segundos="0";
}

public void reiniciarCronometro()
{
hora="0";
minutos="0";
segundos="0";
cronometroActivo=true;
hilo = new Thread(this);
hilo.start();
}

public void pausarCronometro(){
cronometroActivo = false;
hilo = new Thread(this);
hilo.start();
}

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Formato al código

Primero para poder ayudarte creo que es necesario que le des formato al código empieza por ir a este sitio web y hacer que tu código quede en un formato más legible.

De ahí, edita tu publicación y el código con formato ponlo entre las etiquetas:
 
OJO: No debe haber espacio entre "/" y "code". Lo puse para que se viera cómo debe cerrarse cada etiqueta.

Con tu duda. Creo que el propósito de esto es enseñarte cómo separar la vista, de los objetos, de la lógica. Para poder usar una interfaz es necesario implementarla.

Vamos a poner un ejemplo, digamos que tenemos la interfaz velocidad:
 

Luego vamos a decir que existen dos eventos, acelerar y desacelerar:
 

 

Luego, ahora necesitamos entidad, que en este caso vendría siendo la clase carro:
 

Es necesario hacer una pasarela entre la vista y la lógica:
 

Después creamos la vista:
 

Creas la clase principal:
 

Y ya quedaría.