java GUI 的新手,我有问题
New to java GUI and i have questions
我正在为我在 twitch 上的朋友制作一个机器人,他忘记在 xsplit 上从他的 "brb" 场景切换到他的 "game" 场景,所以他想制作一些 mods如果他忘记了,可以更改或控制他计算机上的某些东西。为此制作一个机器人很容易。
代码很容易制作,就是这样。
import java.awt.Robot;
import java.awt.event.KeyEvent;
import org.jibble.pircbot.*;
public class Twitchbot extends PircBot {
public Twitchbot() {
this.setName("Rex__Bot");
}
public void onMessage(String channel, String sender, String login, String hostname, String message) {
if(message.equals("Something")) {
try {
Robot r = new Robot();
r.keyPress(KeyEvent.VK_Something);
r.delay(300);
r.keyRelease(KeyEvent.VK_Something);
}catch(Exception ex) {
ex.printStackTrace();
}
}
}
}
我想知道是否有办法制作一个 GUI 来将消息等于的字母和 keyevent.VK_Something 更改为与 GUI 不同的东西,这样他就可以很容易地编辑它.
因此,首先,您需要一些方法来捕获所需的信息。基本上,您需要消息和击键。击键由虚拟键和修饰符组成。
下面的示例基本上提供了一种用户可以键入消息文本和击键的方法。捕获窗格使用 KeyListener
来监视键事件并通过从键事件中提取各种值,将存储它需要的信息并向用户显示键字符。
您可以将此信息保存到 Properties
文件中,稍后您可以加载...
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
public class Test {
public static void main(String[] args) {
new Test ();
}
public Test () {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ConfigurationPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ConfigurationPane extends JPanel {
private KeyPressPane keyPressPane;
private JTextField name;
public ConfigurationPane() {
name = new JTextField(10);
keyPressPane = new KeyPressPane();
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(name, gbc);
add(keyPressPane, gbc);
JButton save = new JButton("Save");
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Properties p = new Properties();
p.setProperty("name", name.getText());
p.setProperty("keyCode", Integer.toString(keyPressPane.getKeyCode()));
p.setProperty("modifiers", Integer.toString(keyPressPane.getModifiers()));
try (OutputStream os = new FileOutputStream(new File("Config.cfg"))) {
p.store(os, "Key config");
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
add(save);
}
}
public static class KeyPressPane extends JPanel {
protected static final Border FOCUSED_BORDER = BorderFactory.createLineBorder(UIManager.getColor("List.selectionBackground"));
protected static final Border UNFOCUSED_BORDER = UIManager.getBorder("TextField.border");
private JLabel label;
private int keyCode;
private int modifiers;
private char key;
public KeyPressPane() {
setBackground(UIManager.getColor("TextField.background"));
setLayout(new GridBagLayout());
label = new JLabel(" ");
label.setFont(UIManager.getFont("Label.font").deriveFont(48f));
add(label);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
keyCode = e.getKeyCode();
modifiers = e.getModifiers();
}
@Override
public void keyTyped(KeyEvent e) {
char key = e.getKeyChar();
label.setText(Character.toString(key));
}
});
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
requestFocusInWindow();
}
});
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
setBorder(FOCUSED_BORDER);
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("unfocused");
setBorder(UNFOCUSED_BORDER);
}
});
setBorder(UNFOCUSED_BORDER);
setFocusable(true);
}
public int getKeyCode() {
return keyCode;
}
public int getModifiers() {
return modifiers;
}
}
}
然后您需要加载 Properties
文件并创建一个新的 KeyStroke
...
Properties p = new Properties();
try (InputStream is = new FileInputStream(new File("Config.cfg"))) {
p.load(is);
String name = p.getProperty("name");
int keyCode = Integer.parseInt(p.getProperty("keyCode"));
int modifiers = Integer.parseInt(p.getProperty("modifiers"));
KeyStroke ks = KeyStroke.getKeyStroke(keyCode, modifiers);
System.out.println(ks);
} catch (IOException exp) {
exp.printStackTrace();
}
我正在为我在 twitch 上的朋友制作一个机器人,他忘记在 xsplit 上从他的 "brb" 场景切换到他的 "game" 场景,所以他想制作一些 mods如果他忘记了,可以更改或控制他计算机上的某些东西。为此制作一个机器人很容易。
代码很容易制作,就是这样。
import java.awt.Robot;
import java.awt.event.KeyEvent;
import org.jibble.pircbot.*;
public class Twitchbot extends PircBot {
public Twitchbot() {
this.setName("Rex__Bot");
}
public void onMessage(String channel, String sender, String login, String hostname, String message) {
if(message.equals("Something")) {
try {
Robot r = new Robot();
r.keyPress(KeyEvent.VK_Something);
r.delay(300);
r.keyRelease(KeyEvent.VK_Something);
}catch(Exception ex) {
ex.printStackTrace();
}
}
}
}
我想知道是否有办法制作一个 GUI 来将消息等于的字母和 keyevent.VK_Something 更改为与 GUI 不同的东西,这样他就可以很容易地编辑它.
因此,首先,您需要一些方法来捕获所需的信息。基本上,您需要消息和击键。击键由虚拟键和修饰符组成。
下面的示例基本上提供了一种用户可以键入消息文本和击键的方法。捕获窗格使用 KeyListener
来监视键事件并通过从键事件中提取各种值,将存储它需要的信息并向用户显示键字符。
您可以将此信息保存到 Properties
文件中,稍后您可以加载...
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
public class Test {
public static void main(String[] args) {
new Test ();
}
public Test () {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ConfigurationPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ConfigurationPane extends JPanel {
private KeyPressPane keyPressPane;
private JTextField name;
public ConfigurationPane() {
name = new JTextField(10);
keyPressPane = new KeyPressPane();
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(name, gbc);
add(keyPressPane, gbc);
JButton save = new JButton("Save");
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Properties p = new Properties();
p.setProperty("name", name.getText());
p.setProperty("keyCode", Integer.toString(keyPressPane.getKeyCode()));
p.setProperty("modifiers", Integer.toString(keyPressPane.getModifiers()));
try (OutputStream os = new FileOutputStream(new File("Config.cfg"))) {
p.store(os, "Key config");
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
add(save);
}
}
public static class KeyPressPane extends JPanel {
protected static final Border FOCUSED_BORDER = BorderFactory.createLineBorder(UIManager.getColor("List.selectionBackground"));
protected static final Border UNFOCUSED_BORDER = UIManager.getBorder("TextField.border");
private JLabel label;
private int keyCode;
private int modifiers;
private char key;
public KeyPressPane() {
setBackground(UIManager.getColor("TextField.background"));
setLayout(new GridBagLayout());
label = new JLabel(" ");
label.setFont(UIManager.getFont("Label.font").deriveFont(48f));
add(label);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
keyCode = e.getKeyCode();
modifiers = e.getModifiers();
}
@Override
public void keyTyped(KeyEvent e) {
char key = e.getKeyChar();
label.setText(Character.toString(key));
}
});
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
requestFocusInWindow();
}
});
addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
setBorder(FOCUSED_BORDER);
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("unfocused");
setBorder(UNFOCUSED_BORDER);
}
});
setBorder(UNFOCUSED_BORDER);
setFocusable(true);
}
public int getKeyCode() {
return keyCode;
}
public int getModifiers() {
return modifiers;
}
}
}
然后您需要加载 Properties
文件并创建一个新的 KeyStroke
...
Properties p = new Properties();
try (InputStream is = new FileInputStream(new File("Config.cfg"))) {
p.load(is);
String name = p.getProperty("name");
int keyCode = Integer.parseInt(p.getProperty("keyCode"));
int modifiers = Integer.parseInt(p.getProperty("modifiers"));
KeyStroke ks = KeyStroke.getKeyStroke(keyCode, modifiers);
System.out.println(ks);
} catch (IOException exp) {
exp.printStackTrace();
}