import JoyEvents.*; import com.centralnexus.input.Joystick; import com.centralnexus.input.JoystickListener; import java.awt.Image; import java.awt.MenuItem; import java.awt.MouseInfo; import java.awt.Point; import java.awt.PopupMenu; import java.awt.Robot; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import javax.swing.UIManager; public class JoyThread extends Thread implements JoystickListener { private Joystick joy; TrayIcon trayIcon; /* Mouse Control */ boolean[] mouseDir = {false, false, false, false}; // Yukarı,Aşağı,Sağ,Sol boolean mouseTurbo = false; byte mouseSpeed = 5; // max:8 (10-8=2ms en az uyutma payı) int mousePixel = 0; // Pixel Counter int axisX=0,axisY=0; /* Wheel Control */ byte wheelValue = 0; /* Button Control */ // Üçgen,Yuvarlak,Çarpı,Kare * 16 32 64 128 256 512 1024 2048 JoyEvent[] buttons = new JoyEvent[12]; // 12 tuş desteği :D /* Modes */ boolean pause = true; /* Properties */ Properties settings = new Properties(); String s = "Merter Hami KARACAN"; /* About */ JoyAbout about = new JoyAbout(); JoySettings ayarlar = new JoySettings(this); public JoyThread() { super(); s.replace(' ', '_'); //resetSettings(); loadSettings(); //setButtons(); systemTray(); try { String Lf = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(Lf); } catch (Exception e) { System.out.println("UI err."); } this.joy = null; // this.numDevices = Joystick.getNumDevices(); if (Joystick.isPluggedIn(0)) { //if (this.numDevices > 0) { try { System.out.println(Joystick.isPluggedIn(0)); this.joy = Joystick.createInstance(); this.joy.addJoystickListener(this); } catch (IOException e) { System.out.println("ilk hata"); trayIcon.displayMessage("Joustick - Hata", "Takılı Joystick bulunamadı..", TrayIcon.MessageType.INFO); e.printStackTrace(); this.joy = null; // pause = true; } } else { System.out.println("hello"); } } public void loadSettings() { try { settings.load(new FileInputStream("settings.jms")); buttons[0] = loadJoyEvent(settings.getProperty("button0"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button0")).newInstance(); buttons[1] = loadJoyEvent(settings.getProperty("button1"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button1")).newInstance(); buttons[2] = loadJoyEvent(settings.getProperty("button2"));//(JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button2")).newInstance(); buttons[3] = loadJoyEvent(settings.getProperty("button3"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button3")).newInstance(); buttons[4] = loadJoyEvent(settings.getProperty("button4"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button4")).newInstance(); buttons[5] = loadJoyEvent(settings.getProperty("button5"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button5")).newInstance(); buttons[6] = loadJoyEvent(settings.getProperty("button6"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button6")).newInstance(); buttons[7] = loadJoyEvent(settings.getProperty("button7"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button7")).newInstance(); buttons[8] = loadJoyEvent(settings.getProperty("button8"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button8")).newInstance(); buttons[9] = loadJoyEvent(settings.getProperty("button9"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button9")).newInstance(); buttons[10] = loadJoyEvent(settings.getProperty("button10"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button10")).newInstance(); buttons[11] = loadJoyEvent(settings.getProperty("button11"));// (JoyEvent) Class.forName("JoyEvents." + settings.getProperty("button11")).newInstance(); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "Ayarlar yüklenirken sorun oluştu. Varsayılan ayarlar yüklenecek."); resetSettings(); } } public JoyEvent loadJoyEvent(String name) throws Exception { if (name.indexOf('/') > 0) { JoyEvent je1, je2; System.out.println("name:" + name.split("/")[0] + " " + name.split("/")[1]); je1 = (name.split("/")[0].startsWith("key")) ? new JoyKEY(name.split("/")[0]) : (JoyEvent) Class.forName("JoyEvents." + name.split("/")[0]).newInstance(); je2 = (name.split("/")[1].startsWith("key")) ? new JoyKEY(name.split("/")[1]) : (JoyEvent) Class.forName("JoyEvents." + name.split("/")[1]).newInstance(); return new JoyTwiceButton(je1, je2); } else { return (name.startsWith("key")) ? new JoyKEY(name) : (JoyEvent) Class.forName("JoyEvents." + name).newInstance(); } } public void resetSettings() { try { settings.setProperty("button0", "JoyEnter");// Üçgen settings.setProperty("button1", "JoyNothing");// Yuvarlak settings.setProperty("button2", "JoyAlt/JoyF4");// Çarpı settings.setProperty("button3", "JoyLeftClick");// Kare settings.setProperty("button4", "JoyNothing");// sol üst settings.setProperty("button5", "JoyNothing");// sağ üst settings.setProperty("button6", "JoyNothing");// sol alt settings.setProperty("button7", "JoyNothing");// sağ alt settings.setProperty("button8", "JoyNothing");// select settings.setProperty("button9", "JoyNothing");// settings.setProperty("button10", "JoyNothing");// joystick sol settings.setProperty("button11", "JoyNothing");// joystick sağ //settings.setProperty("mousespeed", "10");// joystick sağ settings.store(new FileOutputStream("settings.jms"), "Joustick Button Settings"); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Varsayılan ayarlar yüklenirken sorun oluştu. Lütfen uygulamayı baştan yüklemeyi deneyin."); } } public void systemTray() { if (SystemTray.isSupported()) { try { SystemTray tray = SystemTray.getSystemTray(); Image image = ImageIO.read(this.getClass().getResource("joyico.png")); // Toolkit.getDefaultToolkit().getImage("j256.png"); MouseListener mouseListener = new MouseListener() { public void mouseClicked(MouseEvent e) { System.out.println("Tray Icon - Mouse clicked!"); } public void mouseEntered(MouseEvent e) { System.out.println("Tray Icon - Mouse entered!"); } public void mouseExited(MouseEvent e) { System.out.println("Tray Icon - Mouse exited!"); } public void mousePressed(MouseEvent e) { System.out.println("Tray Icon - Mouse pressed!"); } public void mouseReleased(MouseEvent e) { System.out.println("Tray Icon - Mouse released!"); } }; final MenuItem ayarlarItem = new MenuItem("Ayarlar"); final MenuItem aboutItem = new MenuItem("Hakkında"); final MenuItem startItem = new MenuItem("Başlat"); final MenuItem pauseItem = new MenuItem("Durdur"); final MenuItem exitItem = new MenuItem("Kapat"); ActionListener ayarlarListener = new ActionListener() { public void actionPerformed(ActionEvent e) { ayarlar.setVisible(true); } }; ActionListener aboutListener = new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Hakkında..."); about.setVisible(true); } }; ActionListener exitListener = new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Exiting..."); System.exit(0); } }; ActionListener startListener = new ActionListener() { public void actionPerformed(ActionEvent e) { startItem.setEnabled(false); pauseItem.setEnabled(true); pause = false; trayIcon.displayMessage("Joustick başladı", "Joystick'inizi mouse olarak kullanabilirsiniz..", TrayIcon.MessageType.INFO); } }; ActionListener pauseListener = new ActionListener() { public void actionPerformed(ActionEvent e) { pauseItem.setEnabled(false); startItem.setEnabled(true); pause = true; trayIcon.displayMessage("Joustick duraklatıldı", "Joystick'iniz mouse'unuzu etkileyemeyecek..", TrayIcon.MessageType.INFO); } }; PopupMenu popup = new PopupMenu(); ayarlarItem.addActionListener(ayarlarListener); popup.add(ayarlarItem); startItem.addActionListener(startListener); popup.add(startItem); pauseItem.addActionListener(pauseListener); popup.add(pauseItem); popup.addSeparator(); aboutItem.addActionListener(aboutListener); popup.add(aboutItem); exitItem.addActionListener(exitListener); popup.add(exitItem); trayIcon = new TrayIcon(image, "Joustick v.1.0 Beta", popup); ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { trayIcon.displayMessage("Joustick v.1.0 ßeta", "2011 - Merter Hami KARACAN", TrayIcon.MessageType.INFO); } }; trayIcon.setImageAutoSize(true); trayIcon.addActionListener(actionListener); //trayIcon.addMouseListener(mouseListener); tray.add(trayIcon); } catch (Exception e) { System.err.println("TrayIcon could not be added."); } } else { System.out.println("System tray is not supported.."); // System Tray is not supported } } public void setButtons() { /* Tuş Ataması */ buttons[0] = new JoyLeftClick(); // Üçgen buttons[1] = new JoyRightClick(); // Yuvarlak buttons[2] = new JoyEnter(); // Çarpı buttons[3] = new JoyBackSpace(); // Kare buttons[4] = new JoyCtrl(); // sol üst buttons[5] = new JoyNothing(); // sağ üst buttons[6] = new JoyShift(); // sol alt buttons[7] = new JoyTaskManager(); // sağ alt buttons[8] = new JoyStartMenu(); // select buttons[9] = new JoyNothing(); // buttons[10] = new JoyNothing(); // joystick sol buttons[11] = new JoyNothing(); // joystick sağ } public void mouseControl() { try { Point mouseLoc = MouseInfo.getPointerInfo().getLocation(); if (mouseDir[0] || mouseDir[1] || mouseDir[2] || mouseDir[3]) { if (mousePixel < 500) { if (mouseTurbo) { mousePixel += (8 - mouseSpeed); } else { mousePixel += 1; } } } else { mousePixel = 0; } mouseSpeed = (byte) ((mousePixel / 100)); //(new Robot()).mouseMove(mouseLoc.x + ((mouseDir[2]) ? 1 : ((mouseDir[3]) ? -1 : 0)), mouseLoc.y + ((mouseDir[0]) ? -1 : ((mouseDir[1]) ? 1 : 0))); (new Robot()).mouseMove(mouseLoc.x + axisX/2, mouseLoc.y + axisY/2); Thread.sleep(13 - mouseSpeed); } catch (Exception e) { System.out.println("Mouse Control Error.."); } } public void wheelControl() { try { if (wheelValue != 0) { (new Robot()).mouseWheel((wheelValue / 10) / 2); Thread.sleep(100); } } catch (Exception e) { System.out.println("Wheel Control Error"); } } @Override public void run() { try { //resetSettings(); trayIcon.displayMessage("Joustick başladı", "Joystick'inizi mouse olarak kullanabilirsiniz..", TrayIcon.MessageType.INFO); pause = false; while (true) { //joy.poll(); if (!Joystick.isPluggedIn(0)) { if (!pause) { trayIcon.displayMessage("Joystick çıkarıldı..", "Kullanmak için tekrar takıp, başlat seçeneğine tıklamalısınız..", TrayIcon.MessageType.INFO); pause = true; } Thread.sleep(2000); continue; } if (!pause) { mouseControl(); wheelControl(); } } } catch (Exception e) { trayIcon.displayMessage("Joustick - Hata", "Sorun oluştu lütfen programı tekrar başlatın...", TrayIcon.MessageType.INFO); System.out.println("Thread err.."); } } public static void main(String[] args) { new JoyThread().start(); } public void joystickAxisChanged(Joystick jstck) { int mX = (int) Math.floor(joy.getX() * 100) + 1; int mY = (int) Math.floor(joy.getY() * 100) + 1; int mZ = (int) Math.floor(joy.getZ() * 100) + 1; int mR = (int) Math.floor(joy.getR() * 100) + 1; // soldaki Z: sağa sola R: yukarı aşağı int mU = (int) Math.floor(joy.getU() * 100) + 1; int mV = (int) Math.floor(joy.getV() * 100) + 1; mouseDir[0] = mY < 0;//(joy.getY() == -1.0); // Yukarı mouseDir[1] = mY > 0; //(joy.getY() == 1.0); // Aşağı mouseDir[2] = mX > 0;//(joy.getX() == 1.0); // Sağa mouseDir[3] = mX < 0;//(joy.getX() == -1.0); // Sola mouseTurbo = (Math.abs(mY) > 90 || Math.abs(mX) > 90); axisX=mX/10; axisY=mY/10; //System.out.println("Turbo : "+(mY > 90 || mX > 90)); //System.out.println("mY:" + mY + " mX:" + mX); //System.out.println("X Axis : " + d); wheelValue = (byte) mR; //System.out.println("mZ:" + mZ); //System.out.println("Y:"+joy.getZ()); } public void joystickButtonChanged(Joystick joy) { buttons[0].setAction((joy.getButtons() & 1) == 1); // Üçgen buttons[1].setAction((joy.getButtons() & 2) == 2); // Yuvarlak buttons[2].setAction((joy.getButtons() & 4) == 4); // Çarpı buttons[3].setAction((joy.getButtons() & 8) == 8); // Kare buttons[4].setAction((joy.getButtons() & 16) == 16); // Arka Üst Sol buttons[5].setAction((joy.getButtons() & 32) == 32); // Arka Üst Sağ buttons[6].setAction((joy.getButtons() & 64) == 64); // Arka Alt Sol buttons[7].setAction((joy.getButtons() & 128) == 128); // Arka Alt Sağ buttons[8].setAction((joy.getButtons() & 256) == 256); // select buttons[9].setAction((joy.getButtons() & 512) == 512); // start buttons[10].setAction((joy.getButtons() & 1024) == 1024); // Joystick sol buttons[11].setAction((joy.getButtons() & 2048) == 2048); // Joystick sağ // 1 2 4 8 16 32 64 128 256 512 1024 2048 System.out.println("Buttons : " + joy.getButtons()); joy.poll(); } }