私は、メソッドの再描画を使用しているかどうかわかりません、私はデジタル時計の時刻を更新する必要がありますが、 「TはRepaintメソッドが動作しない、またはループしない
public class Frame extends JFrame{
Calendar calendar = Calendar.getInstance();
int[] horaD = new int[14];
int[] horaU = new int[14];
int[] minD = new int[14];
int[] minU = new int[14];
int[] segD = new int[14];
int[] segU = new int[14];
public Frame(){
this.setTitle("Relógio Digital");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setSize(1000, 400);
this.setVisible(true);
}
public void obterHora(){
verificaHora();
verificaMinuto();
verificaSegundo();
}
public void verificaHora(){
int d;
int u;
int i = calendar.get(Calendar.HOUR_OF_DAY);
char[] digitos = String.valueOf(i).toCharArray();
if(digitos.length == 2){
d = Integer.parseInt(String.valueOf(digitos[0]));
u = Integer.parseInt(String.valueOf(digitos[1]));
}else{
d = 0;
u = Integer.parseInt(String.valueOf(digitos[0]));
}
switch(d){
case 0:
horaD = Numeros.Zero;
break;
case 1:
horaD = Numeros.Um;
break;
case 2:
horaD = Numeros.Dois;
break;
default:
horaU = Numeros.Zero;
break;
}
switch(u){
case 0:
horaU = Numeros.Zero;
break;
case 1:
horaU = Numeros.Um;
break;
case 2:
horaU = Numeros.Dois;
break;
case 3:
horaU = Numeros.Tres;
break;
case 4:
horaU = Numeros.Quatro;
break;
case 5:
horaU = Numeros.Cinco;
break;
case 6:
horaU = Numeros.Seis;
break;
case 7:
horaU = Numeros.Sete;
break;
case 8:
horaU = Numeros.Oito;
break;
case 9:
horaU = Numeros.Nove;
break;
default:
horaU = Numeros.Zero;
break;
}
}
public void verificaMinuto(){
int d;
int u;
int i = calendar.get(Calendar.MINUTE);
char[] digitos = String.valueOf(i).toCharArray();
if(digitos.length == 2){
d = Integer.parseInt(String.valueOf(digitos[0]));
u = Integer.parseInt(String.valueOf(digitos[1]));
}else{
d = 0;
u = Integer.parseInt(String.valueOf(digitos[0]));
}
switch(d){
case 0:
minD = Numeros.Zero;
break;
case 1:
minD = Numeros.Um;
break;
case 2:
minD = Numeros.Dois;
break;
case 3:
minD = Numeros.Tres;
break;
case 4:
minD = Numeros.Quatro;
break;
case 5:
minD = Numeros.Cinco;
break;
default:
minD = Numeros.Zero;
break;
}
switch(u){
case 0:
minU = Numeros.Zero;
break;
case 1:
minU = Numeros.Um;
break;
case 2:
minU = Numeros.Dois;
break;
case 3:
minU = Numeros.Tres;
break;
case 4:
minU = Numeros.Quatro;
break;
case 5:
minU = Numeros.Cinco;
break;
case 6:
minU = Numeros.Seis;
break;
case 7:
minU = Numeros.Sete;
break;
case 8:
minU = Numeros.Oito;
break;
case 9:
minU = Numeros.Nove;
break;
default:
minU = Numeros.Zero;
break;
}
}
public void verificaSegundo(){
int d;
int u;
int i = calendar.get(Calendar.SECOND);
char[] digitos = String.valueOf(i).toCharArray();
if(digitos.length == 2){
d = Integer.parseInt(String.valueOf(digitos[0]));
u = Integer.parseInt(String.valueOf(digitos[1]));
}else{
d = 0;
u = Integer.parseInt(String.valueOf(digitos[0]));
}
switch(d){
case 0:
segD = Numeros.Zero;
break;
case 1:
segD = Numeros.Um;
break;
case 2:
segD = Numeros.Dois;
break;
case 3:
segD = Numeros.Tres;
break;
case 4:
segD = Numeros.Quatro;
break;
case 5:
segD = Numeros.Cinco;
break;
default:
segD = Numeros.Zero;
break;
}
switch(u){
case 0:
segU = Numeros.Zero;
break;
case 1:
segU = Numeros.Um;
break;
case 2:
segU = Numeros.Dois;
break;
case 3:
segU = Numeros.Tres;
break;
case 4:
segU = Numeros.Quatro;
break;
case 5:
segU = Numeros.Cinco;
break;
case 6:
segU = Numeros.Seis;
break;
case 7:
segU = Numeros.Sete;
break;
case 8:
segU = Numeros.Oito;
break;
case 9:
segU = Numeros.Nove;
break;
default:
segU = Numeros.Zero;
break;
}
}
@Override
public void paint(Graphics g){
g.setColor(Color.black);
obterHora();
//Dígito da dezena da hora
g.fillRect(100, 100, horaD[0], horaD[7]);
g.fillRect(100, 100, horaD[1], horaD[8]);
g.fillRect(200, 100, horaD[2], horaD[9]);
g.fillRect(100, 200, horaD[3], horaD[10]);
g.fillRect(200, 200, horaD[4], horaD[11]);
g.fillRect(100, 200, horaD[5], horaD[12]);
g.fillRect(100, 300, horaD[6], horaD[13]);
//Dígito da unidade da hora
g.fillRect(230, 100, horaU[0], horaU[7]);
g.fillRect(230, 100, horaU[1], horaU[8]);
g.fillRect(330, 100, horaU[2], horaU[9]);
g.fillRect(230, 200, horaU[3], horaU[10]);
g.fillRect(330, 200, horaU[4], horaU[11]);
g.fillRect(230, 200, horaU[5], horaU[12]);
g.fillRect(230, 300, horaU[6], horaU[13]);
//Dois pontos (Hora/Minuto)
g.fillRect(365, 180, 15, 15);
g.fillRect(365, 215, 15, 15);
//Dígito da dezena do minuto
g.fillRect(400, 100, minD[0], minD[7]);
g.fillRect(400, 100, minD[1], minD[8]);
g.fillRect(500, 100, minD[2], minD[9]);
g.fillRect(400, 200, minD[3], minD[10]);
g.fillRect(500, 200, minD[4], minD[11]);
g.fillRect(400, 200, minD[5], minD[12]);
g.fillRect(400, 300, minD[6], minD[13]);
//Dígito da unidade do minuto
g.fillRect(530, 100, minU[0], minU[7]);
g.fillRect(530, 100, minU[1], minU[8]);
g.fillRect(630, 100, minU[2], minU[9]);
g.fillRect(530, 200, minU[3], minU[10]);
g.fillRect(630, 200, minU[4], minU[11]);
g.fillRect(530, 200, minU[5], minU[12]);
g.fillRect(530, 300, minU[6], minU[13]);
//Dois pontos (Minuto/Segundo)
g.fillRect(665, 180, 15, 15);
g.fillRect(665, 215, 15, 15);
//Dígito da dezena do segundo
g.fillRect(700, 100, segD[0], segD[7]);
g.fillRect(700, 100, segD[1], segD[8]);
g.fillRect(800, 100, segD[2], segD[9]);
g.fillRect(700, 200, segD[3], segD[10]);
g.fillRect(800, 200, segD[4], segD[11]);
g.fillRect(700, 200, segD[5], segD[12]);
g.fillRect(700, 300, segD[6], segD[13]);
//Dígito da unidade do segundo
g.fillRect(830, 100, segU[0], segU[7]);
g.fillRect(830, 100, segU[1], segU[8]);
g.fillRect(930, 100, segU[2], segU[9]);
g.fillRect(830, 200, segU[3], segU[10]);
g.fillRect(930, 200, segU[4], segU[11]);
g.fillRect(830, 200, segU[5], segU[12]);
g.fillRect(830, 300, segU[6], segU[13]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f = new Frame();
while(true){
f.repaint();
}
}
}
を働く私は私のコードを改善したが、先生は私がこのコードのためのタイマーを使いたくなかったので、私は、スレッドを使用して、再描画を毎秒を遅らせる必要があり、私はこれを試してみましたが、それまだ更新されません
public class Frame extends JFrame{
HoraExata he = new HoraExata(); //Exact Time
private int[] horaD = new int[14];
private int[] horaU = new int[14];
private int[] minD = new int[14];
private int[] minU = new int[14];
private int[] segD = new int[14];
private int[] segU = new int[14];
public Frame(){
this.setTitle("Relógio Digital");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setSize(1000, 400);
}
public void atualizaHora() { //Update Time
while (true) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
public void obterHora(){ //Get the values to make each number in canvas
horaD = he.verificaHora(1);
horaU = he.verificaHora(2);
minD = he.verificaMinuto(1);
minU = he.verificaMinuto(2);
segD = he.verificaSegundo(1);
segU = he.verificaSegundo(2);
}
public void paint(Graphics g){
g.setColor(Color.black);
obterHora();
//Dígito da dezena da hora
g.fillRect(100, 100, horaD[0], horaD[7]);
g.fillRect(100, 100, horaD[1], horaD[8]);
g.fillRect(200, 100, horaD[2], horaD[9]);
g.fillRect(100, 200, horaD[3], horaD[10]);
g.fillRect(200, 200, horaD[4], horaD[11]);
g.fillRect(100, 200, horaD[5], horaD[12]);
g.fillRect(100, 300, horaD[6], horaD[13]);
//Dígito da unidade da hora
g.fillRect(230, 100, horaU[0], horaU[7]);
g.fillRect(230, 100, horaU[1], horaU[8]);
g.fillRect(330, 100, horaU[2], horaU[9]);
g.fillRect(230, 200, horaU[3], horaU[10]);
g.fillRect(330, 200, horaU[4], horaU[11]);
g.fillRect(230, 200, horaU[5], horaU[12]);
g.fillRect(230, 300, horaU[6], horaU[13]);
//Dois pontos (Hora/Minuto)
g.fillRect(365, 180, 15, 15);
g.fillRect(365, 215, 15, 15);
//Dígito da dezena do minuto
g.fillRect(400, 100, minD[0], minD[7]);
g.fillRect(400, 100, minD[1], minD[8]);
g.fillRect(500, 100, minD[2], minD[9]);
g.fillRect(400, 200, minD[3], minD[10]);
g.fillRect(500, 200, minD[4], minD[11]);
g.fillRect(400, 200, minD[5], minD[12]);
g.fillRect(400, 300, minD[6], minD[13]);
//Dígito da unidade do minuto
g.fillRect(530, 100, minU[0], minU[7]);
g.fillRect(530, 100, minU[1], minU[8]);
g.fillRect(630, 100, minU[2], minU[9]);
g.fillRect(530, 200, minU[3], minU[10]);
g.fillRect(630, 200, minU[4], minU[11]);
g.fillRect(530, 200, minU[5], minU[12]);
g.fillRect(530, 300, minU[6], minU[13]);
//Dois pontos (Minuto/Segundo)
g.fillRect(665, 180, 15, 15);
g.fillRect(665, 215, 15, 15);
//Dígito da dezena do segundo
g.fillRect(700, 100, segD[0], segD[7]);
g.fillRect(700, 100, segD[1], segD[8]);
g.fillRect(800, 100, segD[2], segD[9]);
g.fillRect(700, 200, segD[3], segD[10]);
g.fillRect(800, 200, segD[4], segD[11]);
g.fillRect(700, 200, segD[5], segD[12]);
g.fillRect(700, 300, segD[6], segD[13]);
//Dígito da unidade do segundo
g.fillRect(830, 100, segU[0], segU[7]);
g.fillRect(830, 100, segU[1], segU[8]);
g.fillRect(930, 100, segU[2], segU[9]);
g.fillRect(830, 200, segU[3], segU[10]);
g.fillRect(930, 200, segU[4], segU[11]);
g.fillRect(830, 200, segU[5], segU[12]);
g.fillRect(830, 300, segU[6], segU[13]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame f = new Frame();
f.setVisible(true);
f.atualizaHora();
}
}
についてあなたが求める方法はpaintComponent' –
は、なぜあなたは 'repaint'を呼び出す保つために'ながら-loop'が必要なのか 'のですか? – MadProgrammer