【发布时间】:2016-09-19 03:29:23
【问题描述】:
这是我的代码。我希望按键监听器在我按下按键时创建一个矩形。我在键监听器中实现填充矩形方法时遇到问题。
我尝试过分离键监听器,但是,我不知道如何将它们相互连接以使用 JPanel 方法。
import javax.swing.*;
import java.awt.*;
public class Keyboard
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Keyboard");
frame.setLayout(new BorderLayout());
MyPanel displayPanel = new MyPanel();
frame.add(displayPanel, BorderLayout.CENTER);
frame.addKeyListener(displayPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width, java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height);
frame.setVisible(true);
}
}
MyPanel 类
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.JComponent;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements KeyListener {
private boolean one;
private boolean two;
private boolean three;
private boolean four;
private boolean five;
private boolean six;
private boolean seven;
private boolean eight;
private boolean nine;
private boolean zero;
private boolean dash;
public MyPanel() {
one = false;
two = false;
three = false;
four = false;
five = false;
six = false;
seven = false;
eight = false;
nine = false;
zero = false;
dash = false;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
setBackground(new Color(51, 25, 0));
for(int i=0; i<11; i++)
{
if(i%2 == 0)
{
g.setColor(Color.WHITE);
g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 212, 1000);
}
else
{
g.setColor(Color.BLACK);
g.fillRect(i*(java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width/11), 450, 174, 1000);
}
if(one==true)
{
g.setColor(Color.BLUE);
g.fillRect(50,50,50,50);
repaint();
}
}
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() ==KeyEvent.VK_1 && !one)
{
System.out.println("asdasda");
one = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_2 && !two)
{
two = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_3 && !three)
{
three = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_4 && !four)
{
four = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_5 && !five)
{
five = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_6 && !six)
{
six = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_7 && !seven)
{
seven = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_8 && !eight)
{
eight = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_9 && !nine)
{
nine = true;
}
else if(e.getKeyCode() ==KeyEvent.VK_0 && !zero)
{
zero = true;
}
else if(e.getKeyCode() == 189 && !dash)
{
dash = true;
}
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() ==KeyEvent.VK_1)
{
one = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_2)
{
two = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_3)
{
three = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_4)
{
four = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_5)
{
five = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_6)
{
six = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_7)
{
seven = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_8)
{
eight = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_9)
{
nine = false;
}
else if(e.getKeyCode() ==KeyEvent.VK_0)
{
zero = false;
}
else if(e.getKeyCode() == 189)
{
dash = false;
}
}
public void keyTyped(KeyEvent e)
{
System.out.println("Typed: " + e.getKeyChar());
}
}
【问题讨论】:
标签: java swing keylistener paintcomponent