Olá pessoal ! Uma duvida que eu verifiquei em alguns sites que fala do assunto ! é possivel utilizar algumas funções da API do windows com Java ? Se for o caso de poder utilizar, qual metodou ou implementação eu posso utilizar ?
Quais funções você pretende usar?
Provavelmente, vai precisar de JNI ou JNA, caso as funções desejadas dependam de interagir com DLL.
Se não for o caso, existe a possibilidade de tentar usar a classe Runtime e/ou ProcessBuilder
A classes Runtime e ProcessBuilder eu dei uma lida mas não se encaixa no que eu queria estudar. Tipo, é possivel utilizar algum ouvinte do mouse por exemplo e jogar em uma aplicação java ?
Tópico duplicado?
Até onde eu sei, o java consegue capturar as informações do mouse quando você está com o mouse sobre um elemento java (javafx, java swing, java awt).
O máximo que vai conseguir é algo assim
import java.awt.MouseInfo;
public class MyClass {
public static void main(String[] args) throws InterruptedException {
System.out.println("Mouse has " + MouseInfo.getNumberOfButtons() + " buttons");
while (true) {
Thread.sleep(100);
System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
+ MouseInfo.getPointerInfo().getLocation().y + ")");
}
}
}
a classe MouseInfo ela traz as respostas de “ouvinte” dos componentes awt, existe a possibilidade e pegar os eventos de mouse ate depois da borda desses componente ?? Por exemplo esse é o codigo que eu montei no NETBEANS:
/*
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
*/
package descifrador.de.coordenadas.visao;
import com.sun.java.accessibility.util.AWTEventMonitor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.peer.MouseInfoPeer;
import java.util.EventListener;
/**
*
-
@author RIVALDO
*/
public class visualizador extends javax.swing.JFrame implements MouseMotionListener, MouseListener{/**
-
Creates new form visualizador
/
public visualizador() {
initComponents();
}
/* -
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”)
//
private void initComponents() {jPanel1 = new javax.swing.JPanel();
descricaoY = new javax.swing.JLabel();
descricaoX = new javax.swing.JLabel();
titulo = new javax.swing.JLabel();
posicaoY = new javax.swing.JLabel();
posicaoX = new javax.swing.JLabel();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(0, 0, 0));
descricaoY.setForeground(new java.awt.Color(0, 102, 0));
descricaoY.setText(“POSIÇÃO Y:”);descricaoX.setForeground(new java.awt.Color(0, 102, 0));
descricaoX.setText(“POSIÇÃO X:”);titulo.setForeground(new java.awt.Color(0, 102, 0));
titulo.setText(“POSIÇÃO DO MOUSE”);posicaoY.setForeground(new java.awt.Color(0, 102, 0));
posicaoY.setText("…");posicaoX.setForeground(new java.awt.Color(0, 102, 0));
posicaoX.setText("…");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)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(descricaoX)
.addGap(18, 18, 18)
.addComponent(posicaoX, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(descricaoY)
.addGap(18, 18, 18)
.addComponent(posicaoY, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(36, 36, 36)
.addComponent(titulo)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(titulo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(descricaoY)
.addComponent(posicaoY))
.addGap(36, 36, 36)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(descricaoX)
.addComponent(posicaoX))
.addGap(21, 21, 21))
);javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
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();
}//
/**
-
@param args the command line arguments
/
public static void main(String args[]) {
/ Set the Nimbus look and feel /
//
/ 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 (“Windows”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(visualizador.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new visualizador().setVisible(true);
}});
} - For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
Point Local;
// Variables declaration - do not modify
private javax.swing.JLabel descricaoX;
private javax.swing.JLabel descricaoY;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel posicaoX;
private javax.swing.JLabel posicaoY;
private javax.swing.JLabel titulo;
// End of variables declaration@Override
public void mouseDragged(MouseEvent e) {
//To change body of generated methods, choose Tools | Templates.
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX()));
}@Override
public void mouseMoved(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX()));
//To change body of generated methods, choose Tools | Templates.
}@Override
public void mouseClicked(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX()));//To change body of generated methods, choose Tools | Templates.
}@Override
public void mousePressed(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates.
}@Override
public void mouseReleased(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates.
}@Override
public void mouseEntered(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates.
}@Override
public void mouseExited(MouseEvent e) {
posicaoY.setText(Integer.toString(e.getY()));
posicaoX.setText(Integer.toString(e.getX())); //To change body of generated methods, choose Tools | Templates.
}public void iniciar(){
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);}
} -
Nele eu adicionei o this para ficar dentro da janela no JFrame, porem não existe um parametro diferente que eu pegue essas chamadas de fora.
Você precisa lembrar que o java depende de uma máquina virtual que pode ter limitações quanto a determinadas funcionalidades.
Mas, eu realmente não conheço outras maneiras de capturar eventos/dados do mouse sem ser estas.
O mais simples é usar JNA.
Exemplo:
Valeu Kronal ! Vou dar uma lida.