Lueskelin yhtä java-kirjaa, ja tein tämmöisen ohjelman:
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class ClockPanel extends JPanel {
public ClockPanel() {
super();
String currentTime = getTime();
JLabel time = new JLabel("Kello: ");
JLabel current = new JLabel(currentTime);
add(time);
add(current);
}
String getTime() {
String Kello;
// get current time and date
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int month = now.get(Calendar.MONTH) 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);
int second = now.get(Calendar.SECOND);
String monthName = "";
switch (month) {
case (1):
monthName = "Tammikuu";
break;
case (2):
monthName = "Helmikuu";
break;
case (3):
monthName = "Maaliskuu";
break;
case (4):
monthName = "Huhtikuu";
break;
case (5):
monthName = "Toukokuu";
break;
case (6):
monthName = "Kesäkuu";
break;
case (7):
monthName = "Heinäkuu";
break;
case (8):
monthName = "Elokuu";
break;
case (9):
monthName = "Syyskyy";
break;
case (10):
monthName = "Lokakuu";
break;
case (11):
monthName = "Marraskuu";
break;
case (12):
monthName = "Joulukuu";
}
Kello = monthName " " day ", " year " "
hour ":" minute ":" second;
return Kello;
}
}
Tietenkin mulla on vielä yks ohjelma, joka antaa graaffisen tilan (vai miksi sitä pitäisi kutsua). Ongelmana on se, että kyseinen ohjelma on hyödytön, ellei se suorita itseänsä kerran sekunnissa, tai minuutissa (jos poistaa sekunnit ohjelmasta).
Elikä minkäslainen koodinpätkä pitäisi lisätä ja mihin kohtaan?
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class ClockPanel extends JPanel {
public ClockPanel() {
super();
String currentTime = getTime();
JLabel time = new JLabel("Kello: ");
JLabel current = new JLabel(currentTime);
add(time);
add(current);
}
String getTime() {
String Kello;
// get current time and date
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int month = now.get(Calendar.MONTH) 1;
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);
int second = now.get(Calendar.SECOND);
String monthName = "";
switch (month) {
case (1):
monthName = "Tammikuu";
break;
case (2):
monthName = "Helmikuu";
break;
case (3):
monthName = "Maaliskuu";
break;
case (4):
monthName = "Huhtikuu";
break;
case (5):
monthName = "Toukokuu";
break;
case (6):
monthName = "Kesäkuu";
break;
case (7):
monthName = "Heinäkuu";
break;
case (8):
monthName = "Elokuu";
break;
case (9):
monthName = "Syyskyy";
break;
case (10):
monthName = "Lokakuu";
break;
case (11):
monthName = "Marraskuu";
break;
case (12):
monthName = "Joulukuu";
}
Kello = monthName " " day ", " year " "
hour ":" minute ":" second;
return Kello;
}
}
Tietenkin mulla on vielä yks ohjelma, joka antaa graaffisen tilan (vai miksi sitä pitäisi kutsua). Ongelmana on se, että kyseinen ohjelma on hyödytön, ellei se suorita itseänsä kerran sekunnissa, tai minuutissa (jos poistaa sekunnit ohjelmasta).
Elikä minkäslainen koodinpätkä pitäisi lisätä ja mihin kohtaan?
Vastaukset 4
Vanhimmat
ei ohjelman itseään tarvitse uudelleen suorittaa, vaan sekunnin välein voidaan suorittaa mitä ohjelmoija haluaa.
package untitled1;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.Timer;
import java.awt.*;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Title:
*
* Description:
*
* Copyright: Copyright (c) 2006
*
* Company:
*
* @author not attributable
* @version 1.0
*/
public class Frame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
JButton jButton1 = new JButton();
JLabel jLabel1 = new JLabel();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(borderLayout1);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jButton1.setText("jButton1");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jLabel1.setText("jLabel1");
contentPane.add(jButton1, java.awt.BorderLayout.NORTH);
contentPane.add(jLabel1, java.awt.BorderLayout.CENTER);
}
public void jButton1_actionPerformed(ActionEvent e) {
jLabel1.setText("joo");
Timer t = new Timer (1000, new
ActionListener ()
{
public void actionPerformed (ActionEvent event)
{
jLabel1.setText((jLabel1.getText()) "-");
}
});
t.start ();
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
---------
ja tuosta siis oleellisin osuus tässä:
jButton1_actionPerformed(ActionEvent e) {
jLabel1.setText("joo");
Timer t = new Timer (1000, new
ActionListener ()
{
public void actionPerformed (ActionEvent event)
{
jLabel1.setText((jLabel1.getText()) "-");
}
});
t.start ();
}
}
siinä kohtaan
{
jLabel1.setText((jLabel1.getText()) "-");
}
laitetaan, mitä kerran sekunnissa halutaan tehtävän. eli noiden aaltosulkujen väliin.
tuo esimerkki-koodi käynnistää laskurin kun jButton1:ä klikataan. sen jälkeen se kirjoittaa jLabel1:een "-"-merkin vaikka hamaan tulevaisuuteen saakka, tai ainakin siihen saakka kun ajastin pysäytetään.
koodissa on tietty se vika, että jButton1 pitäisi disabloida sen jälkeen kun sitä klikkaa. muuten noita ajastimia voi luoda rajattoman määrän. oleellista on myös import kohdassa olla:
import javax.swing.Timer; //tai sitten koodissasi mainittu:
import javax.swing.*;
Voisitko tehdä tuohon mun ohjelmaan sen jutun, ku en oikeen ymmärtänyt, mitä koodia siihen aaltosulkeiden väliin
laittaa. tää ois minulle helpoin tapa oppia kyseinen tapa. :) Kiitos!
sorry kun aika on vähän tiukassa, eli ehtisin aikaisintaan perjantaina tekemään koodin valmiiksi..
mutta jos haluat itse kokeilla, niin _kaikki_ niiden mainittujen aaltosulkeiden välissä oleva suoritetaan kerran sekunnissa.
eli sinne sitä koodia, missä otetaan aika string-muotoon ja kirjoitetaan jlabel1:een.
tai sitten jos joku toinen ehtisi laittamaan tänne mallikoodin. itse olen aika surkea javan kanssa ja mulla tollaisenkin tekeminen vie paljon aikaa..
No kiitoksia kummiskin, ku viitsit autttaa :)