我需要一点java的帮助,我是语言的新手,因此我不知道如何实现这个。
我已经制作了一个基本的15; 40格JLabel Image,感谢这个网站,我需要帮助的是关于如何制作一个播放器(假设是一个图像,也显示在网格上)四处移动使用WASD(我不知道Ascii-approach是否适用于java)或箭头键。
这是我的网格代码
public class GUI {
static Scanner cns = new Scanner(System.in);
JFrame frame = new JFrame();
ImageIcon ImageIcon = new ImageIcon("Grass.png");
JLabel[][] grid;
public GUI(int width, int length) {
Container pane = frame.getContentPane();
frame.setLayout(new GridLayout(width,length));
grid = new JLabel[width][length];
for(int y = 0; y < length; y++) {
for(int x = 0; x < width; x++) {
grid[x][y] = new JLabel();
grid[x][y].setBorder(BorderFactory.createLineBorder(Color.black));
grid[x][y].setBorder(BorderFactory.createEmptyBorder());
}
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
for(int y = 0; y < length; y++) {
for(int x = 0; x < width; x++) {
pane.add(grid[x][y]= new JLabel(new ImageIcon("Grass.png")));
grid[x][y].setBorder(BorderFactory.createLineBorder(Color.black));
grid[x][y].setBorder(BorderFactory.createEmptyBorder());
frame.add(grid[x][y]);
}
}
}
public static void main(String[] args) {
new GUI(15, 40);
}
}
答案 0 :(得分:0)
这里有一些建议:
1 - 使GUI扩展JFrame并实现KeyListener。
您必须覆盖KeyListener方法(keyPressed,keyReleased和keyTyped),您应该从JFrame覆盖repaint()。
重绘方法应该在末尾调用super.repaint()来更新帧。
2 - 让GUI字段存储有关需要绘制的内容的数据。
您可能应该将网格或网格中的内容存储为字段。
3 - 构造函数应该初始化,而不是渲染。
渲染应该在repaint()中完成。构造函数应该执行以下操作:
super();
JPanel frame = new JPanel();
add(frame);
pack();
addKeyListener(this);
repaint();
这个答案有点未完成,但我会更多地了解它并更新它。特别是,JPanel是JFrame中的一个元素。
更新:这是一个小工作示例。使用WASD在屏幕上移动矩形。
这是JFrame。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class MyJFrame extends JFrame implements KeyListener {
private MyJPanel frame;
public MyJFrame() {
super();
frame = new MyJPanel();
add(frame);
pack();
addKeyListener(this);
repaint();
}
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.setTitle("Test");
}
@Override
public void repaint() {
super.repaint();
}
@Override
public void keyPressed(KeyEvent e) {
frame.keyPressed(e);
repaint();
}
@Override
public void keyTyped(KeyEvent e) { }
@Override
public void keyReleased(KeyEvent e) { }
}
这是JPanel。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
public class MyJPanel extends JPanel {
private int x = 0;
private int y = 0;
public MyJPanel() {
setPreferredSize(new Dimension(200,200));
}
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawRect(x,y,20,20);
}
public void keyPressed(KeyEvent e) {
int k = e.getKeyCode();
switch (k) {
case KeyEvent.VK_D:
x++;
break;
case KeyEvent.VK_A:
x--;
break;
case KeyEvent.VK_W:
y--;
break;
case KeyEvent.VK_S:
y++;
break;
}
}
}
祝你好运!