我的 JButton 有問題。我需要改變的goPauseButton文本已經被點擊的時候,但我得到這個錯誤:goPauseButton cannot be resolved。我對 Java 很陌生,所以我開始嘗試使用其他語言(如 Free Pascal)的技術來解決這個問題。在那里你需要參考按鈕所在的類,然后是按鈕。在我的代碼中,它看起來像這樣:
PrisonersDilemma.goPauseButton.setText("Pause");
但是后來我收到了這個錯誤: Cannot make a static reference to the non-static field PrisonersDilemma.goPauseButton
這是我的代碼(到目前為止),我已經洗掉了不重要的東西:
主班
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.util.Hashtable;
//...
public class PrisonersDilemma /* possible extends... */ {
// declaring
JFrame frame;
PlayingField field;
JPanel componentPanel;
public JButton goPauseButton;
public JPanel createComponentPanel() {
componentPanel = new JPanel();
componentPanel.setLayout(new GridLayout(2,6));
// set goPauseButton
goPauseButton = new JButton("GO!");
goPauseButton.addActionListener(field);
goPauseButton.setBounds(110,350, 80,20); // first coordinates, then size
frame.add(goPauseButton);
return componentPanel;
}
void buildGUI() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
field = new PlayingField();
// set frame
frame = new JFrame("Prisoners Dilemma");
frame.add(field);
createComponentPanel();
frame.add(field, BorderLayout.CENTER);
frame.setLocation(200, 200);
frame.pack();
frame.setVisible(true);
frame.setSize(400, 450);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} );
}
帶有 ActionEventHandler 的類
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JButton;
public class PlayingField extends JPanel
implements ActionListener,
ChangeListener {
private boolean started;
@Override
public void actionPerformed(ActionEvent e) {
// TODO
if ("GO!".equals(e.getActionCommand())){
System.out.println("GO!");
started = true;
goPauseButton.setText("Pause"); // here is the error
} else if ("Pause".equals(e.getActionCommand())){
System.out.println("Pause");
started = false;
} else if ("Reset".equals(e.getActionCommand())){
System.out.println("Reset");
}
}
}
uj5u.com熱心網友回復:
我認為您需要改變處理問題的方式。在PlayingField具有修改的狀態不承擔任何責任goPauseButton在PrisonersDilemma。相反,PrisonersDilemma應該更新goPauseButton并呼叫適當的方法PlayingField
例如...
goPauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
goPauseButton.setText("Pause");
field.start();
}
});
和...
public class PlayingField extends JPanel {
public void start() {
System.out.println("GO!");
started = true;
}
public void pause() {
started = false;
System.out.println("Pause");
}
public void reset() {
System.out.println("Reset");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326955.html
