NetBeansでjframeを作成しましたが、このjframeは別のJavaクラスによって「起動」されていますが、現在の質問には関係ありません。重要なことは、私のこのjframeにキーリスナーを追加する方法を見つけることができないという事実です。私はキーリスナーを実装し、必要な機能(キー入力、キー押下、キーリリース)を追加しました。しかし、実際のキー・リスナーを実際に追加/開始して動作させる方法を理解することはできません。JframeにKeyListenerを追加する
現時点では、実際には実際のフレームが開始されているコードの先頭にaddKeylistener(new JFrameList());
という行を追加しようとしましたが、実際のフレームでも表示されません。これとは別に、同じ行を別の関数callJframFForm()
に追加しようとしましたが、これはjframeが呼び出されるのと同時に別のクラスから呼び出されます。しかし、これはエラーnon-static method addKeyListener(KeyListener) cannot be referenced from a static context
を返します。私は、キーリスナーを追加することができる他の方法が何であるか分かりませんので、ちょっとした助けを求めています。
現在、私のコードは以下のようになります。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class JFrameList extends javax.swing.JFrame implements KeyListener{
public static String keyPresCod = "";
public JFrameList() {
initComponents();
addKeyListener(new JFrameList()); //This is where I am currently trying to call from, but frame won't show
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrameList().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
// End of variables declaration
static void callJframFForm(){
try {
//This is where I have also tried to add the initialization line
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void keyTyped(KeyEvent e) {
int codeFKey = e.getKeyCode();
if (codeFKey == KeyEvent.VK_A) {
System.out.println("Button A clicked");
keyPresCod = "A";
} else if (codeFKey == KeyEvent.VK_B) {
System.out.println("Button B clicked");
keyPresCod = "B";
} else {
System.out.println("Different key pressed");
keyPresCod = "Another key";
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
あなたの現在のアプローチは過度であると思います。[ボタン、チェックボックス、ラジオボタンの使い方]を参照してください(http://docs.oracle.com/javase/tutorial/uiswing/components/ button.html)は、ユーザーが使用しているあらかじめ定義された作業方法を持っています。 – MadProgrammer
@MadProgrammer - '私は見ています... ' - うれしいです。 – camickr
@camickrしかし、OPが解決しようとしている問題への文脈の欠如を考えると、私はそれが答えかどうかわかりません;) – MadProgrammer