public interface InterfaceEnergia extends StdCallLibrary{
public class SYSTEM_POWER_STATUS extends Structure{
public byte ACLineStatus;
public byte BatteryFlag;
public byte BatteryLifePercent;
public byte Reserved1;
public int BatteryLifeTime;
public int BatteryFullLifeTime;
public int getBatteryLifePercent(){
int percent = 0;
if(BatteryLifePercent != (byte)255){
percent = BatteryLifePercent;
}
return percent;
}
public String getACLineStatus(){
String r = null;
switch(ACLineStatus){
case 0:
return "Off";
case 1:
return "On";
default:
break;
}
return r;
}
}
public int GetSystemPowerStatus(SYSTEM_POWER_STATUS result);
}
public class Energia implements Observer{
JLabel labelPercentagem;
JLabel labelBateria;
JProgressBar barraProgress;
public Energia(JLabel labelPercentagem, JProgressBar barraProgress, JLabel labelBateria){
this.labelPercentagem = labelPercentagem;
this.barraProgress = barraProgress;
this.labelBateria = labelBateria;
}
private void progressbar(String str, boolean op, Color cor){
barraProgress.setString(str);
barraProgress.setStringPainted(op);
barraProgress.setForeground(cor);
}
private void configEnergiaNotebook(EnergiaRunnable e){
barraProgress.setOrientation(barraProgress.VERTICAL);
barraProgress.setMinimum(0);
barraProgress.setMaximum(100);
if(e.getPercentagem() <= 100 && e.getPercentagem() >= 65){
progressbar("", true, Color.GREEN);
labelPercentagem.setForeground(Color.GREEN);
}
if(e.getPercentagem() <= 64 && e.getPercentagem() >= 36){
progressbar("", true, Color.ORANGE);
labelPercentagem.setForeground(Color.ORANGE);
}
if(e.getPercentagem() <= 35 && e.getPercentagem() >= 0){
progressbar("", true, Color.RED);
labelPercentagem.setForeground(Color.RED);
}
if(e.getBateria().equals("Off")){
labelBateria.setForeground(Color.RED);
labelBateria.setText(" Desligado");
}else{
labelBateria.setForeground(Color.BLUE);
labelBateria.setText(" Ligado");
}
barraProgress.setValue(e.getPercentagem());
labelPercentagem.setText(String.valueOf(e.getPercentagem()).concat("%"));
}
@Override
public void update(Observable o, Object arg){
EnergiaRunnable e = (EnergiaRunnable)o;
configEnergiaNotebook(e);
}
}
public class EnergiaRunnable extends Observable implements Runnable{
private int percentagem = 0;
private String bateria = "";
public static boolean fim = false;
private InterfaceEnergia energia = (InterfaceEnergia)Native.loadLibrary("kernel32.dll", InterfaceEnergia.class);
InterfaceEnergia.SYSTEM_POWER_STATUS sps = new InterfaceEnergia.SYSTEM_POWER_STATUS();
public EnergiaRunnable(Observer ob){
this.addObserver(ob);
energia.GetSystemPowerStatus(sps);
}
public int getPercentagem(){
return percentagem;
}
public String getBateria(){
return bateria;
}
@Override
public void notifyObservers(){
super.setChanged();
super.notifyObservers();
}
@Override
public void run(){
while(!fim){
percentagem = sps.getBatteryLifePercent();
bateria = sps.getACLineStatus();
this.notifyObservers();
}
}
}
public class MyFrame extends javax.swing.JFrame{
private EnergiaRunnable energia;
public MyFrame(){
initComponents();
setResizable(false);
setLocationRelativeTo(null);
startEnergia();
}
private void startEnergia(){
energia = new EnergiaRunnable(new Energia(this.jLabel1, this.jProgressBar1, this.jLabel4));
new Thread(energia).start();
}
@SuppressWarnings("unchecked")
//Generated Code
public static void main(String args[]){
/* Set the Nimbus look and feel */
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
}
