
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.FlowLayoutimport 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)
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)