怎样给Jpanel加监听事件

怎样给Jpanel加监听事件,第1张

我写了个小例子,是键盘监听的,这也是JPanel最特殊的一个监听,希望对你有帮助。

package net.miqiang.gui

import java.awt.BorderLayout

import java.awt.event.KeyEvent

import java.awt.event.KeyListener

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPanel

/**

* 给JPanel添加KeyListener监听实例

* @author 米强

*

*/

public class Test extends JFrame {

private JLabel label = null

public Test() {

super("给JPanel添加KeyListener监听")

label = new JLabel("Key:", JLabel.CENTER)

JPanel pane = new JPanel()

// 给JPanel对象添加了KeyListener事件监听

pane.addKeyListener(new KeyListener() {

public void keyTyped(KeyEvent e) {

}

public void keyReleased(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

// 将按键字符显示在JLabel标签中

label.setText("Key:" + String.valueOf(e.getKeyChar()))

}

})

getContentPane().add(pane)

getContentPane().add(label, BorderLayout.NORTH)

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

setSize(300, 200)

setLocationRelativeTo(null)

setVisible(true)

// KeyListener监听必需在窗体显示之后调用requestFocus方法使其获得焦点,否则KeyListener事件无法触发,鼠标点击事件、拖动事件等则不需要。

pane.requestFocus()

}

public static void main(String[] args) {

new Test()

}

}

而且,我是在JPanel里画坦克的,但是我想在JPanel里添加一个键盘监听器,用来控制坦克的移动,但是添加后没有用

------解决方案--------------------------------------------------------

最简单的方法,在frame里addKeyListener(x)当然 x 应该是单独的类或者frame的内部类,总之要对frame可见,而panel只管画图其他不管。

你把tank的坐标放在 panel里了,暂时只有坐标还可以,要是tank的属性多了就不如单独封装在一个类里了。

actionlistener字面上理解就是动作监听器。\x0d\x0a它是一个接口,在实现此接口的类中,你可以给需要关注其动作的组件(如Button)添加监听器(addActionListener(this)),之后在事件处理方法(public void actionPerformed(ActionEvent event){})中,对每个事件进行不同处理。\x0d\x0a给你个例子吧,是我自己写的一个记事本:\x0d\x0aimport java.io.*\x0d\x0aimport java.awt.event.*\x0d\x0aimport javax.swing.*\x0d\x0apublic class MainClass extends JFrame implements ActionListener{\x0d\x0aint width = 500,height = 400\x0d\x0aJPanel panel\x0d\x0aJMenuBar bar\x0d\x0aJMenu fileMenu,editMenu,helpMenu\x0d\x0aJMenuItem 打开O,新建N,保存S,另存A,剪切T,复制C,粘贴P,关于A\x0d\x0aJTextArea textArea = null\x0d\x0aFile tempFile = null\x0d\x0apublic MainClass(){ //构造方法\x0d\x0asetTitle("TextEdit")\x0d\x0asetSize(width,height)\x0d\x0apanel = (JPanel)getContentPane()\x0d\x0abar = new JMenuBar()\x0d\x0afileMenu = new JMenu("文件F")\x0d\x0afileMenu.setMnemonic('F')\x0d\x0aeditMenu = new JMenu("编辑E")\x0d\x0aeditMenu.setMnemonic('E')\x0d\x0ahelpMenu = new JMenu("帮助H")\x0d\x0ahelpMenu.setMnemonic('H')\x0d\x0a打开O = new JMenuItem("打开O")\x0d\x0a打开O.setMnemonic('O')\x0d\x0a新建N = new JMenuItem("新建N")\x0d\x0a新建N.setMnemonic('N')\x0d\x0a保存S = new JMenuItem("保存S")\x0d\x0a保存S.setMnemonic('S')\x0d\x0a另存A = new JMenuItem("另存A")\x0d\x0a另存A.setMnemonic('A')\x0d\x0a剪切T = new JMenuItem("剪切C")\x0d\x0a剪切T.setMnemonic('t')\x0d\x0a复制C = new JMenuItem("复制C")\x0d\x0a复制C.setMnemonic('C')\x0d\x0a粘贴P = new JMenuItem("粘贴P")\x0d\x0a粘贴P.setMnemonic('P')\x0d\x0a关于A = new JMenuItem("关于A")\x0d\x0a关于A.setMnemonic('A')\x0d\x0afileMenu.add(打开O)\x0d\x0afileMenu.add(新建N)\x0d\x0afileMenu.add(保存S)\x0d\x0afileMenu.add(另存A)\x0d\x0abar.add(fileMenu)\x0d\x0aeditMenu.add(剪切T)\x0d\x0aeditMenu.add(复制C)\x0d\x0aeditMenu.add(粘贴P)\x0d\x0abar.add(editMenu)\x0d\x0ahelpMenu.add(关于A)\x0d\x0abar.add(helpMenu)\x0d\x0atextArea = new JTextArea()\x0d\x0apanel.add("North",bar)\x0d\x0apanel.add("Center", textArea)\x0d\x0a打开O.addActionListener(this)\x0d\x0a新建N.addActionListener(this)\x0d\x0a保存S.addActionListener(this)\x0d\x0a另存A.addActionListener(this)\x0d\x0a剪切T.addActionListener(this)\x0d\x0a复制C.addActionListener(this)\x0d\x0a粘贴P.addActionListener(this)\x0d\x0a关于A.addActionListener(this)\x0d\x0asetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)\x0d\x0asetVisible(true)\x0d\x0a}\x0d\x0apublic void actionPerformed(ActionEvent event){ //处理事件\x0d\x0aif(event.getSource() == 打开O){ //处理打开\x0d\x0aJFileChooser jfc = new JFileChooser()\x0d\x0ajfc.showOpenDialog(panel)\x0d\x0atempFile = jfc.getSelectedFile()\x0d\x0aFileReader fis\x0d\x0atry {\x0d\x0afis = new FileReader(tempFile)\x0d\x0atextArea.read(fis,null)\x0d\x0atextArea.setEditable(true)\x0d\x0a}catch(Exception ex){ex.printStackTrace()}\x0d\x0a}\x0d\x0aif(event.getSource() == 新建N){ //处理新建\x0d\x0atextArea.setEditable(true)\x0d\x0atextArea.setText(null)\x0d\x0a}\x0d\x0aif(event.getSource() == 保存S){ //处理保存\x0d\x0aif(tempFile == null){\x0d\x0aJFileChooser jfc = new JFileChooser()\x0d\x0ajfc.showSaveDialog(panel)\x0d\x0atempFile = jfc.getSelectedFile()\x0d\x0atry{\x0d\x0aFileWriter fos = new FileWriter(tempFile)\x0d\x0atextArea.write(fos)\x0d\x0a}catch(Exception ex){ex.printStackTrace()}\x0d\x0a}\x0d\x0aelse{\x0d\x0atry{\x0d\x0aFileWriter fos = new FileWriter(tempFile)\x0d\x0atextArea.write(fos)\x0d\x0a}catch(Exception ex){ex.printStackTrace()}\x0d\x0a}\x0d\x0a}\x0d\x0aif(event.getSource() == 另存A){ //处理另存\x0d\x0aJFileChooser jfc = new JFileChooser()\x0d\x0ajfc.showSaveDialog(panel)\x0d\x0atempFile = jfc.getSelectedFile()\x0d\x0atry{\x0d\x0aFileWriter fos = new FileWriter(tempFile)\x0d\x0atextArea.write(fos)\x0d\x0a}catch(Exception ex){ex.printStackTrace()}\x0d\x0a}\x0d\x0aif(event.getSource() == 剪切T){ //处理剪切\x0d\x0atextArea.cut()\x0d\x0a}\x0d\x0aif(event.getSource() == 复制C){ //处理复制\x0d\x0atextArea.copy()\x0d\x0a}\x0d\x0aif(event.getSource() == 粘贴P){ //处理粘贴\x0d\x0atextArea.paste()\x0d\x0a}\x0d\x0aif(event.getSource() == 关于A){ //处理关于\x0d\x0atextArea.setText("Manifest-Version: 1.0\n" +\x0d\x0a"Created-By: Libra_JL\n" +\x0d\x0a"QQ: 254791521\n")\x0d\x0atextArea.setEditable(false)\x0d\x0apanel.validate()\x0d\x0avalidate()\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String []args){ //主函数\x0d\x0anew MainClass()\x0d\x0a}\x0d\x0a}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11620821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存