picia2222
Technical User
- Jan 8, 2013
- 5
Hello. I have analog clock app and want to change hands color using setter and getter. I write some code but not work. Can You help me?
My code:
file zegarek.java:
file okno.java:
My code:
file zegarek.java:
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import static java.lang.Math.*;
import java.util.Calendar;
import javax.swing.*;
class ClockComponent extends JComponent{
//zmienne prywatne
private Calendar systemTime = Calendar.getInstance();
private int centerX = 200 ;
private int centerY = 200;
private Color tloKolor;
BufferedImage clockFace ;
//konstruktor bezparametrowy public ClockComponent(){};
public ClockComponent(){};
public void setKolor (Color R) {tloKolor=R;}
public Color getKolor () {return tloKolor;}
@Override
public void paint(Graphics g){
//rysowanie ogólnego wyglądu zegarka
Graphics2D graphics = (Graphics2D)g;
//włączenie antialiasingu aby grafika ładniej wyglądała
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (clockFace==null) {
//wczytanie obrazka z tarczą
clockFace = new BufferedImage(400, 400, BufferedImage.BITMASK);
Graphics2D face = clockFace.createGraphics();
face.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
drawTiks(face);
//szerokość piura
BasicStroke width = new BasicStroke(3);
face.setStroke(width);
face.setPaint(Color.BLACK);
//face.drawOval(0, 0, 400, 400);
drawHands(face, 0, 0, 0, 10);
}
graphics.drawImage(clockFace, null, 0, 0);
drawSecond(graphics);
drawMinute(graphics);
drawHour(graphics);
}
//parametry wskazówki sekund
private void drawSecond(Graphics2D graphics){
int seconds = systemTime.get(Calendar.SECOND);//pobieranie sekund z kalendarza
int secondsAngle = seconds*6;//ustawienie kąta dla wskazówki
drawHands(graphics, -30, 160, secondsAngle,1);//rysowanie wskazówki
}
//parametry wskazówki minut
private void drawMinute(Graphics2D graphics){
int minutes = systemTime.get(Calendar.MINUTE);//pobieranie minut z kalendarza
double minuteAngle = (minutes)*6;//ustawienie kąta dla wskazówki
drawHands(graphics, 0, 150, minuteAngle,2);//rysowanie wskazówki
}
//parametry wskazówki godzin
private void drawHour(Graphics2D graphics){
int hours = systemTime.get(Calendar.HOUR); //pobieranie godziny z kalendarza
double hourAngle = (hours+ (double)(systemTime.get(Calendar.MINUTE))/60)*30; //ustawienie kąta dla wskazówki
drawHands(graphics, 0, 110, hourAngle,4);//rysowanie wskazówki
}
//rysowanie wskazówek
private void drawTiks(Graphics2D graphics){
int x=0;
while(true){
int y =180;
if(x%30==0)y=170;
drawHands(graphics, y, 180, x,2);
if (x==360) break;
x += 6;
}
}
//ustawienia wyglądu wskazówki
private void drawHands(Graphics2D graphics, int startRadius, int endRadius, double teta,int width){
double radian = toRadians(teta-90);
int startX = centerX+ (int)(startRadius*cos(radian));
int startY = centerY+ (int)(startRadius*sin(radian));
int endX = centerX+ (int)(endRadius*cos(radian));
int endY = centerY+ (int)(endRadius*sin(radian));
BasicStroke line = new BasicStroke(width,BasicStroke.JOIN_ROUND,BasicStroke.CAP_ROUND);
graphics.setStroke(line);
graphics.setColor(tloKolor);
graphics.drawLine(startX, startY, endX, endY);
}
ActionListener update = new ActionListener() {
public void actionPerformed(ActionEvent e) {
systemTime.setTimeInMillis(System.currentTimeMillis());
repaint();
}
};
Timer fireUpdate = new Timer(1000, update);
}
file okno.java:
Java:
import java.awt.Color;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Admin
*/
public class okno extends javax.swing.JFrame {
/**
* Creates new form okno
*/
public okno() {
initComponents();
ClockComponent clock = new ClockComponent();
clock.setSize(600, 600);
jPanel1.add(clock);
clock.fireUpdate.start();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jColorChooser1 = new javax.swing.JColorChooser();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jComboBox1 = new javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/clock.png"))); // NOI18N
jLabel2.setText("Ustaw kolor zegara");
jButton1.setText("Zmień");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ZmienKolor(evt);
}
});
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "RED", "GREEN" }));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(134, 134, 134))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addContainerGap(112, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void ZmienKolor(java.awt.event.ActionEvent evt) {
ClockComponent kolor = new ClockComponent();
String stringR = jComboBox1.getSelectedItem().toString();
if (stringR.equals("RED")) {
Color S = Color.RED;
kolor.setKolor(S);
kolor.repaint();
jButton1.setBackground(S);
kolor.repaint();
}
else if (stringR.equals("GREEN")){
Color S = Color.GREEN;
kolor.setKolor(S);
kolor.repaint();
jButton1.setBackground(S);
kolor.repaint();
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see [URL unfurl="true"]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/URL]
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(okno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(okno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(okno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(okno.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new okno().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JColorChooser jColorChooser1;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}