无法从类型组件中对非静态方法挫折(颜色)进行静态引用



我遇到此错误无法从该代码的类型组件中静态引用非静态方法挫折(颜色);

    public class ColourChoice {
        private static JPanel myContentPane = new JPanel();
        public static void main(String args[]) {
            Object[] colourchoice = {"Default", "Orange"};   
            String UserInput = (String) JOptionPane.showInputDialog(null, "Please choose a colour","ColourChoice",JOptionPane.PLAIN_MESSAGE, null,colourchoice, "Default");
             if (UserInput.equals("Orange")) myContentPane.setBackground(Color.ORANGE);
            JFrame window = new JFrame();
            window.setVisible(true);
            window.setSize(100, 100);
            JPanel myContentPane = new JPanel();
            window.setContentPane(myContentPane);
     }
  }

我有一个jframe,在内部我有一个jpanel,并带有框架和面板加载,用户可以从下拉菜单中选择颜色,该菜单将出现在实际窗口加载之前,但是当我编写颜色的代码时'panel.setbackground(color.orange);'它给我上述错误。

  1. 首先,不要使用==比较字符串,而是使用.equals(...)方法。正如该站点上对其进行了很好的讨论一样,==检查一个对象是否与另一个对象相同。它检查是否身份,而equals(或equalsignorecase)方法检查字符串是否以相同的顺序具有相同的字符,这是您感兴趣的。
  2. 接下来,请确保您在变量上调用方法,而不是在类java.AWT.Panel上调用方法。请注意,可变名称应从较低的案例字母开始。无论如何,要避免让自己和他人混淆。
  3. 此练习的关键是有效地引用了您要更改其背景颜色的Jpanel。该对象应分配给非静态类字段,以便其他方法可以获取它并在其上调用方法。

编辑
关于您的更新代码,您的问题在这里:

// likely in some constructor or method
Object[] colourchoice = {"Default", "Orange"};   
String UserInput = (String) JOptionPane.showInputDialog(null, "Please choose a colour","ColourChoice",JOptionPane.PLAIN_MESSAGE, null,colourchoice, "Default");
if (UserInput == "Orange") Panel.setBackground(Color.ORANGE);
GUIDesign window = new GUIDesign();
window.setVisible(true);
window.setSize(100, 100);
JPanel Panel = new JPanel();  // ***** here
window.setContentPane(Panel);

问题:

  • 不要命名您的变量"面板"。同样,可变名称应从较低的案例字母开始。
  • 由于您在方法或构造函数中声明此变量,这意味着 *可见仅在同一变量或构造函数内部。
  • 再次该变量应在类级别上声明为非静态变量。
  • 仍然使用==在获得建议不这样做后比较字符串 - 为什么?

,例如,

public class MyGui {
  private JPanel myContentPane = new JPanel();
  MyGui() {
     // add myContentPane to the GUI
  }

现在您可以在班上任何地方使用Mycontentpane。


编辑2
例如...

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class ColorBackground {
   private static final int PREF_W = 600;
   private static final int PREF_H = 450;
   // my main JPanel. I declare it in the class
   private JPanel mainPanel = new JPanel() {
      public Dimension getPreferredSize() {
         // so kleopatra doesn't down-vote me
         return ColorBackground.this.getPreferredSize();
      };
   };
   private JComboBox colorBox = new JComboBox(ColorChoices.values());
   public ColorBackground() {
      mainPanel.add(colorBox);
      colorBox.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            ColorChoices choice = (ColorChoices) colorBox.getSelectedItem();
            mainPanel.setBackground(choice.getColor()); // now I can call methods on the field
         }
      });
   }
   public JComponent getMainPanel() {
      return mainPanel;
   }
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }
   private static void createAndShowGui() {
      JFrame frame = new JFrame("Color Background");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new ColorBackground().getMainPanel());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
enum ColorChoices {
   DEFAULT("Default", null), ORANGE("Orange", Color.orange), BLUE("Blue",
         Color.blue), HOT_PINK("Hot Pink", new Color(255, 64, 128));
   public String getName() {
      return name;
   }
   @Override
   public String toString() {
      return name;
   }
   public Color getColor() {
      return color;
   }
   private ColorChoices(String name, Color color) {
      this.name = name;
      this.color = color;
   }
   private String name;
   private Color color;
}

编辑3
关于您的最新代码更新:

  • 将所有代码从主要方法中取出。
  • 创建一个真正的OOP-Comp-Inperaint程序,一个程序具有构造函数,非静态字段,非静态方法。
  • 研究挥杆前研究Java。

相关内容

  • 没有找到相关文章

最新更新