Witam. Mam do zrobienia projekt "Mierniki wychyłowe" za pomocą komponentu. Program ma wczytywać dane z pliku a następnie wyświetlać te dane na mierniku np prędkościomierzu. Mam zaprojektowane już gui. Wygląda jak tablica rozdzielcza samochodu. Projekt posiada plik z gui oraz pliki z komponentami, które rysują mi wskazówkę pokazującą daną wartość. Gdy ustawię na sztywno jakąś wartość w pliku komponentu to wszystko działa poprawnie. Problem zaczyna się gdy w pliku gui zostają dane wczytane z pliku txt a następnie przekazane do pliku komponentu. Po prostu program się odpala ale wyświetla wartość ustawioną na sztywno w komponencie. Kombinuję i nie wiem jak zrobić odświeżanie tego komponentu aby wyświetlał wartość pobraną z pliku. Wiem, że może trochę zawile to napisałem ale może będzie ktoś w stanie mi pomóc. Z góry dziękuję za wszystkie odpowiedzi. Poniżej wrzucam kod z pliku z gui oraz kod z komponentu.
Plik z gui wygląda tak:
import java.awt.Color;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Picia
*/
public class tablica extends javax.swing.JFrame {
FileReader fr = null;
String linia = "";
String lol;
public tablica() {
initComponents();
wczytanie ();
Predkosc pred = new Predkosc();
pred.setSize(300, 321);
jPanel2.add(pred);
jPanel2.repaint();
pred.fireUpdate.start();
Temperatura temp = new Temperatura();
temp.setSize(258, 258);
jPanel1.add(temp);
Paliwo fuel = new Paliwo();
fuel.setSize(258, 258);
jPanel4.add(fuel);
Obroty obrot = new Obroty();
obrot.setSize(300, 321);
jPanel3.add(obrot);
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox();
jLabel5 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(0, 0, 0));
setPreferredSize(new java.awt.Dimension(1125, 450));
jPanel1.setBackground(new java.awt.Color(0, 0, 0));
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3.png"))); // NOI18N
jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
pokaz(evt);
}
});
jPanel2.setBackground(new java.awt.Color(0, 0, 0));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1.png"))); // NOI18N
jLabel2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
pokaz_pred(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jLabel2)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jLabel2)
.addGap(0, 0, Short.MAX_VALUE))
);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel3.setBackground(new java.awt.Color(0, 0, 0));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2.png"))); // NOI18N
jLabel3.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
pokaz_obroty(evt);
}
});
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jLabel3)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jLabel3)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel4.setBackground(new java.awt.Color(0, 0, 0));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4.png"))); // NOI18N
jLabel4.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
pokaz_paliwo(evt);
}
});
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(jLabel4)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addGap(63, 63, 63)
.addComponent(jLabel4)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel5.setBackground(new java.awt.Color(204, 204, 204));
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Standardowy", "Morski", "Czerwony", "Zielony", "Niebieski", "Żółty" }));
jLabel5.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jLabel5.setForeground(new java.awt.Color(255, 255, 255));
jLabel5.setText("Wybierz kolor tarczy:");
jButton1.setText("Zmień");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
zmien(evt);
}
});
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addGap(0, 0, Short.MAX_VALUE))
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addContainerGap(75, 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(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, 0)
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void zmien(java.awt.event.ActionEvent evt) {
String stringS = jComboBox1.getSelectedItem().toString();
if (stringS.equals("Standardowa")) {
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4.png")));
}
else if (stringS.equals("Morski")){
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3_a.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1_a.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2_a.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4_a.png")));
}
else if (stringS.equals("Czerwony")){
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3_b.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1_b.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2_b.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4_b.png")));
}
else if (stringS.equals("Zielony")){
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3_c.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1_c.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2_c.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4_c.png")));
}
else if (stringS.equals("Niebieski")){
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3_d.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1_d.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2_d.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4_d.png")));
}
else if (stringS.equals("Żółty")){
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/3_e.png")));
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/1_e.png")));
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/2_e.png")));
jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icon/4_e.png")));
}
}
private void pokaz(java.awt.event.MouseEvent evt) {
JOptionPane jopt = new JOptionPane();
Temperatura temp = new Temperatura();
double A = temp.getA();
String aString = Double.toString(A);
String result;
result = "<html>Temperatura Twojego silnika wynosi: " + aString + " <sup>o</sup>C";
JLabel resLabel = new JLabel(result);
resLabel.setFont(new Font("Monospaced", Font.BOLD, 25));
resLabel.setForeground(Color.RED);
//jopt.setFont(new Font("Monospaced", Font.BOLD, 50));
jopt.showMessageDialog( null, resLabel, "Temperatura silnika", JOptionPane.INFORMATION_MESSAGE );
}
private void pokaz_pred(java.awt.event.MouseEvent evt) {
JOptionPane jopt = new JOptionPane();
Predkosc pred = new Predkosc();
double A = pred.getA();
String aString = Double.toString(A);
String result;
result = "<html>Prędkość Twojego samochodu wynosi: " + aString + " KM/H";
JLabel resLabel = new JLabel(result);
resLabel.setFont(new Font("Monospaced", Font.BOLD, 25));
resLabel.setForeground(Color.RED);
//jopt.setFont(new Font("Monospaced", Font.BOLD, 50));
jopt.showMessageDialog( null, resLabel, "Prędkość samochodu", JOptionPane.INFORMATION_MESSAGE );
}
private void pokaz_obroty(java.awt.event.MouseEvent evt) {
JOptionPane jopt = new JOptionPane();
Obroty obr = new Obroty();
double A = obr.getA();
String aString = Double.toString(A);
String result;
result = "Obroty Twojego silnika wynoszą: " + aString + " RPM";
JLabel resLabel = new JLabel(result);
resLabel.setFont(new Font("Monospaced", Font.BOLD, 25));
resLabel.setForeground(Color.RED);
//jopt.setFont(new Font("Monospaced", Font.BOLD, 50));
jopt.showMessageDialog( null, resLabel, "Obroty silnika", JOptionPane.INFORMATION_MESSAGE );
}
private void pokaz_paliwo(java.awt.event.MouseEvent evt) {
JOptionPane jopt = new JOptionPane();
Paliwo pal = new Paliwo();
double A = pal.getA();
String aString = Double.toString(A);
String result;
result = "W baku masz: " + aString + " litrów paliwa";
JLabel resLabel = new JLabel(result);
resLabel.setFont(new Font("Monospaced", Font.BOLD, 25));
resLabel.setForeground(Color.RED);
//jopt.setFont(new Font("Monospaced", Font.BOLD, 50));
jopt.showMessageDialog( null, resLabel, "Stan paliwa", JOptionPane.INFORMATION_MESSAGE );
}
private void wczytanie(){
final Predkosc ustaw = new Predkosc();
Thread predkosc = new Thread(){
public void run(){
// OTWIERANIE PLIKU:
try {
fr = new FileReader("predkosc.txt");
} catch (FileNotFoundException e) {
System.out.println("BŁĄD PRZY OTWIERANIU PLIKU!");
System.exit(1);
}
BufferedReader bfr = new BufferedReader(fr);
try {
while((linia = bfr.readLine()) != null){
double P = ustaw.getA();
lol = Double.toString(P);
System.out.println(lol);
double A = Double.parseDouble(linia);
ustaw.setA(A);
ustaw.repaint();
jPanel2.repaint();
try {
sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(tablica.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (IOException e) {
System.out.println("BŁĄD ODCZYTU Z PLIKU!");
System.exit(2);
}
// ZAMYKANIE PLIKU
try {
fr.close();
} catch (IOException e) {
System.out.println("BŁĄD PRZY ZAMYKANIU PLIKU!");
System.exit(3);
}
}};
predkosc.start();
}
/**
* @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 http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
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(tablica.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(tablica.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(tablica.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(tablica.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 tablica().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
// End of variables declaration
}
a plik z komponentem wygląda tak:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import static java.lang.Math.*;
import javax.swing.*;
class Predkosc extends JComponent{
private int centerX = 150 ;
private int centerY = 163;
private double strzalka;
BufferedImage gaugeFace ;
public void setA (double A) {strzalka=A;}
public double getA () {return strzalka;}
@Override
public void paint(Graphics g){
Graphics2D graphics = (Graphics2D)g;
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (gaugeFace==null) {
gaugeFace = new BufferedImage(300, 300, BufferedImage.BITMASK);
Graphics2D face = gaugeFace.createGraphics();
face.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
BasicStroke width = new BasicStroke(3);
face.setStroke(width);
face.setPaint(Color.BLUE);
drawHands(face, 0, 0, 0, 10);
}
graphics.drawImage(gaugeFace, null, 0, 0);
drawStrzalka(graphics);
}
private void drawStrzalka(Graphics2D graphics){
double kat_strzalki = strzalka*1.285;
drawHands(graphics, 0, 80, kat_strzalki,4);
}
//radius Measured From the Center of the Clock
private void drawHands(Graphics2D graphics, int startRadius, int endRadius, double teta,int width){
double radian = toRadians(teta-270);
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.setPaint(Color.BLUE);
graphics.drawLine(startX, startY, endX, endY);
}
ActionListener update = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(strzalka!=0){repaint();}
}
};
Timer fireUpdate = new Timer(1000, update);
}