我不明白内部类 CHameleon 的功能。我不明白第8行理论上意味着什么。
我认为这意味着生成将在内部类外部访问的 JFrame 的重复版本,以便操作预期的 JFrame 对象。
编辑:代码带来空指针异常错误,因为 JFrame 对象从未被引用。解决方案:将JFrame框架修改为最终的JFrame框架。
这就提出了一个问题:如果有多个 JFrame 怎么办?
例如,如果我有一个班级花园,里面有不同的蔬菜,我创建了一个内部班级色板来为这些蔬菜着色。是创建针对特定蔬菜的特定类的唯一解决方案吗?因此,为了回答我自己的问题,在多个 JFrame 的情况下,它们会显示为不同类型的类,我的情况是?
public class LabelsButtonsPanelsandSnakes {
public static void main(String[] args){
final JFrame frame = new JFrame("Test");
JMenuBar menuBar = new JMenuBar(); //menubar
JMenu menu = new JMenu("Menu");
JMenuItem chameleon = new JMenuItem("Change Color");
class CHameleonaction implements ActionListener{ //inside class opens
JFrame frameHolder; //line 8
public void actionPerformed(ActionEvent e)
{
frame.getContentPane().setBackground(new Color(112,253,95));
}
} //inside class ends
chameleon.addActionListener(new CHameleonaction());
menuBar.add(menu);
frame.setJMenuBar(menuBar);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有State模式的Swing库生成动态画布.我的代码可以编译,但是当按下按钮时,控制台上会出现红色标记.
问题:我的自引用指针或保留字这超出了按钮的范围.我希望能够在没有任何静态的情况下访问该类.
错误:线程"AWT-EventQueue-0"中的异常java.lang.Error:未解决的编译问题:类型State中的方法handlePush(SP)不适用于参数(new ActionListener(){})
这是画布类.
public class SP extends JPanel{
private static final long serialVersionUID = 1L;
private State state = null;
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowCanvasGUI();
}
});
}
public SP(State state ){
this.state = state;
init();
}
public SP(){
this(new BlackState());
}
public static void createAndShowCanvasGUI(){
JFrame frm = new JFrame("State Pattern");
frm.setVisible(true);
frm.setSize(400, 400);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setContentPane(new SP());
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(state.getColor());
g.fillRect(0, 0, getWidth(), getHeight());
repaint(); …Run Code Online (Sandbox Code Playgroud)