怎样给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()

}

}

你建立的JButton按钮只有实例,没有句柄,不能用xx.addActionListener(new Action...)的格式添加。

可以这样改J1.add(new JButton("btn"+i))->J1.add(new JButton(new MyAction(参数)))

MyAction是实现了Action接口的用户自定类,

可以直接用MyAction implements Action来实现,不过这样比较复杂,必须实现接口中的所有方法。

建议用MyAction extends AbstractAction编写较为简单。

import java.awt.FlowLayout

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.JButton

import javax.swing.JFrame

public class AddButtons extends JFrame implements ActionListener {

private static final long serialVersionUID = 5322709709362727424L

private JButton[] jb = new JButton[20]

public AddButtons() {

super("添加多个按钮!")

this.setLayout(new FlowLayout())

this.setSize(800, 600)

this.setBounds(10, 10, 800, 600)

for (int i = 0i <jb.lengthi++) {

jb[i] = new JButton("按钮" + i)

jb[i].addActionListener(this)

this.add(jb[i])

}

this.setVisible(true)

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE)

}

public static void main(String[] args) {

new AddButtons()

}

@Override

public void actionPerformed(ActionEvent e) {

for (int i = 0i <jb.lengthi++) {

if (e.getSource().equals(jb[i])) {

System.out.println(i)

}

}

}

}


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

原文地址:https://54852.com/bake/11601478.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存