首先,我有 2 个类 Runtest 和 Front 使用 Jpanel 扩展。我想做的是用按键监听器(ENTER 键)切换这两个面板,但它只是静态的并且不会改变,这是到目前为止的代码,
import static com.sun.java.accessibility.util.AWTEventMonitor.addKeyListener;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Pactest implements ActionListener , KeyListener{
JFrame frame = new JFrame("Test");
Runtest test ;
Front front = new Front();
CardLayout cardpane = new CardLayout();
int key ;
public Pactest() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
addKeyListener(this);
this.test = new Runtest();
frame.setLayout(cardpane);
frame.setSize(355, 520);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(front);
frame.add(test);
frame.setVisible(true);
frame.setResizable(false);
cardpane.show(front, "1");
}
@Override
public void actionPerformed(ActionEvent ae) {
if(key == KeyEvent.VK_ENTER){
cardpane.next(frame);
}
}
@Override
public void keyTyped(KeyEvent ke) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyPressed(KeyEvent ke) {
key = ke.getKeyCode();
}
@Override
public void keyReleased(KeyEvent ke) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public static void main(String[] args) throws IOException, UnsupportedAudioFileException, LineUnavailableException {
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run(){
new Pactest() ;
}
});
}
最佳答案
当您在没有此方法的类中调用 addKeyListener(...)
时,您的代码甚至不应该编译,因为它不是从 Component 或 JComponent 扩展的:
public class Pactest implements ActionListener , KeyListener{
JFrame frame = new JFrame("Test");
Runtest test ;
Front front = new Front();
CardLayout cardpane = new CardLayout();
int key ;
public Pactest() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
addKeyListener(this);
将来,如果您询问有编译问题的代码,请告诉我们这些问题,发布所有错误消息,并指出哪些行涉及错误。
一旦你解决了这个问题,更好的解决方案是使用键绑定(bind),因为使用键绑定(bind)你可以解决 KeyListener 所遇到的大多数问题。请查看Key Bindings Tutorial了解更多。
<小时/>更具体的建议:
- 请注意,如果将 CardLayout 添加到 JFrame,实际上是将其添加到 JFrame 的 contentPane,而不是 JFrame 本身,这可能会让您陷入困境。
- 而是将 CardLayout 添加到 JPanel,然后将“卡片”(通常是其他 JPanel)添加到同一个 JPanel。
- 调用 CardLayout 方法时,必须传入使用它的容器,即上述 JPanel。
- 然后将使用 JPanel 的 CardLayout 添加到您需要的 JFrame 中。
- 再次强调,使用按键绑定(bind),而不是 KeyListener,因为如果设置正确,按键绑定(bind)即使在绑定(bind)的组件没有焦点的情况下也可以工作。
关于java - 在 java 中使用 Keylistener 的 CardLayout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049571/