【问题标题】:Method cannot be resolved or is not a field方法无法解析或不是字段
【发布时间】:2016-05-11 14:30:20
【问题描述】:

我有 3 节课;一个开始类,一个kassa类和一个kassapaneel类。 kassapaneel 是我的面板,如果我是正确的,它就是图形方面。在我的 kassa 类中,我有一个名为 getSubtoaal 的方法,它已扩展到我的 kassapaneel,但它似乎无法识别它。 berekenBTW 也是如此。还有总变量。

我的卡萨班:

package Opdrachten;

import javax.swing.*;

public class Kassa extends JPanel{
private double subtotaal;
private final double PERCENTAGE_BTW = 19.0;

public void telOp(double bedrag) {
    subtotaal += bedrag;
}

public double getSubtotaal() {
    return subtotaal;
}

public void reset() {
    subtotaal = 0;
}

public double berekenBTW() {
    return subtotaal - berekenSubtotaalExBTW();
}

public double berekenSubtotaalExBTW() {
    return subtotaal / (1 + PERCENTAGE_BTW / 100);
}
}

我的 kassapaneel(面板):

package Opdrachten;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;

public class Kassapaneel extends Kassa {
private JTextField invoerVak;
  private JTextField subtotaalVak, BTWVak, exBTWVak, totaalVak;
  private JLabel invoerLabel, subtotaalLabel, BTWLabel, exBTWLabel, totaalLabel;
  private JButton totaalKnop, resetKnop;
  private Kassa kassa;



  public Kassapaneel() 
  {
    setLayout( null ); 
    //maak kassa
    kassa = new Kassa();


    //maak knop
    totaalKnop = new JButton("Totaal");
    totaalKnop.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Double subtotaal = kassa.getSubtotaal();
            Double btw = kassa.berekenBTW();
            Double exBtw = subtotaal - btw;

            subtotaalVak.setText(String.valueOf(subtotaal));
            BTWVak.setText(String.valueOf(btw));
            exBTWVak.setText(String.valueOf(exBtw));
        }
    });

    resetKnop = new JButton("Reset");
    resetKnop.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
            kassa.reset();
        }
    });

    // Maak de tekstvakken
    invoerVak = new JTextField( 10 );
    invoerVak.setHorizontalAlignment( JTextField.RIGHT );
    invoerVak.addActionListener( new KnopHandler1() );

    subtotaalVak = new JTextField( 10 );
    subtotaalVak.setHorizontalAlignment( JTextField.RIGHT );
    subtotaalVak.addActionListener( new KnopHandler1() );
    subtotaalVak.setBackground( Color.LIGHT_GRAY );


    BTWVak = new JTextField( 10 );
    BTWVak.setHorizontalAlignment( JTextField.RIGHT );
    BTWVak.addActionListener( new KnopHandler1() );
    BTWVak.setBackground( Color.LIGHT_GRAY );


    exBTWVak = new JTextField( 10 );
    exBTWVak.setHorizontalAlignment( JTextField.RIGHT );
    exBTWVak.addActionListener( new KnopHandler1() );
    exBTWVak.setBackground( Color.LIGHT_GRAY );

    totaalVak = new JTextField( 10 );
    totaalVak.setHorizontalAlignment( JTextField.RIGHT );
    totaalVak.addActionListener( new KnopHandler1() );
    totaalVak.setBackground( Color.GREEN );




    // Maak de labels
    invoerLabel = new JLabel( "voer bedrag in" );
    subtotaalLabel = new JLabel("Subtotaal");
    BTWLabel = new JLabel ("BTW");
    exBTWLabel = new JLabel ("Totaal ex BTW");
    totaalLabel = new JLabel ("Totaal");


    // Bepaal van alle componenten de plaats en afmeting

    invoerVak.setBounds ( 100,50,120,20 );
    subtotaalVak.setBounds ( 100,80,120,20 );
    BTWVak.setBounds ( 100,110,120,20 );
    exBTWVak.setBounds ( 100,140,120,20 );
    totaalVak.setBounds ( 100,170,120,20 );

    totaalKnop.setBounds ( 230,50,100,20 );
    resetKnop.setBounds ( 230,80,100,20 );

    invoerLabel.setBounds ( 10,50,120,20 );
    subtotaalLabel.setBounds ( 10,80,120,20 );
    BTWLabel.setBounds ( 10,110,120,20 );
    exBTWLabel.setBounds ( 10,140,120,20 );
    totaalLabel.setBounds ( 10,170,120,20 );



    // Voeg de componenten toe aan het paneel
    add (invoerVak);
    add (subtotaalVak);
    add (BTWVak);
    add (exBTWVak);
    add (totaalVak);
    add (totaalKnop);
    add (resetKnop);
    add (invoerLabel);
    add (subtotaalLabel);
    add (BTWLabel);
    add (exBTWLabel);
    add (totaalLabel);

  }


  class KnopHandler1 implements ActionListener 
  {
    public void actionPerformed( ActionEvent e ) 
    {
        String invoer = invoerVak.getText();
        double invoerBedrag = Double.parseDouble (invoer);

        //hiermee stop je het bedrag in het kassasysteem.
        kassa.telOp (invoerBedrag);
        kassa.berekenBTW();
        kassa.berekenSubtotaalExBTW();

        kassa.totaal = (kassa.getSubtotaal + kassa.berekenBTW);            
    }
  }

  class KnopHandler2 implements ActionListener 
  {
    public void actionPerformed( ActionEvent e ) 
    {
        kassa.reset();

    }
  }

}

【问题讨论】:

  • 什么方法不能解决,在哪里解决?
  • 是解决不了的方法吗?我看到kassa.totaal = (kassa.getSubtotaal + kassa.berekenBTW); 没有括号。这会导致问题。我在 Kasaa 类中没有看到名为 totaal 的公共变量。
  • 此外,您正在扩展 Kassa 类,但您正在定义 Kassa 类的属性。这是一种通缉行为吗?
  • 我对自己的代码感到困惑..
  • @Lucafraser 你有一些有趣的代码。我注意到一些奇怪的事情,例如您如何创建扩展 ActionListener 的内部类,但使用匿名类作为重置按钮。您还扩展Kasaa,并在超类中创建一个新的Kasaa 对象。

标签: java swing


【解决方案1】:

这里尝试解决您的一些问题:

我删除了 Kasaa 对象,因为 Kassapaneel extends Kasaa。这意味着您将可以访问 Kasaa 中的 protected+ 方法和字段。我相信您遇到的问题在KnopHandler1 ActionListener 中。您试图调用不存在的字段,它们不是方法,因为它们末尾没有括号。

package Opdrachten;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;

public class Kassapaneel extends Kassa {
private JTextField invoerVak;
  private JTextField subtotaalVak, BTWVak, exBTWVak, totaalVak;
  private JLabel invoerLabel, subtotaalLabel, BTWLabel, exBTWLabel, totaalLabel;
  private JButton totaalKnop, resetKnop;    

  public Kassapaneel() 
  {
    setLayout( null ); 

    //maak knop
    totaalKnop = new JButton("Totaal");
    totaalKnop.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Double subtotaal = getSubtotaal();
            Double btw = berekenBTW();
            Double exBtw = subtotaal - btw;

            subtotaalVak.setText(String.valueOf(subtotaal));
            BTWVak.setText(String.valueOf(btw));
            exBTWVak.setText(String.valueOf(exBtw));
        }
    });

    resetKnop = new JButton("Reset");
    resetKnop.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
            reset();
        }
    });

    // Maak de tekstvakken
    invoerVak = new JTextField( 10 );
    invoerVak.setHorizontalAlignment( JTextField.RIGHT );
    invoerVak.addActionListener( new KnopHandler1() );

    subtotaalVak = new JTextField( 10 );
    subtotaalVak.setHorizontalAlignment( JTextField.RIGHT );
    subtotaalVak.addActionListener( new KnopHandler1() );
    subtotaalVak.setBackground( Color.LIGHT_GRAY );


    BTWVak = new JTextField( 10 );
    BTWVak.setHorizontalAlignment( JTextField.RIGHT );
    BTWVak.addActionListener( new KnopHandler1() );
    BTWVak.setBackground( Color.LIGHT_GRAY );


    exBTWVak = new JTextField( 10 );
    exBTWVak.setHorizontalAlignment( JTextField.RIGHT );
    exBTWVak.addActionListener( new KnopHandler1() );
    exBTWVak.setBackground( Color.LIGHT_GRAY );

    totaalVak = new JTextField( 10 );
    totaalVak.setHorizontalAlignment( JTextField.RIGHT );
    totaalVak.addActionListener( new KnopHandler1() );
    totaalVak.setBackground( Color.GREEN );




    // Maak de labels
    invoerLabel = new JLabel( "voer bedrag in" );
    subtotaalLabel = new JLabel("Subtotaal");
    BTWLabel = new JLabel ("BTW");
    exBTWLabel = new JLabel ("Totaal ex BTW");
    totaalLabel = new JLabel ("Totaal");


    // Bepaal van alle componenten de plaats en afmeting

    invoerVak.setBounds ( 100,50,120,20 );
    subtotaalVak.setBounds ( 100,80,120,20 );
    BTWVak.setBounds ( 100,110,120,20 );
    exBTWVak.setBounds ( 100,140,120,20 );
    totaalVak.setBounds ( 100,170,120,20 );

    totaalKnop.setBounds ( 230,50,100,20 );
    resetKnop.setBounds ( 230,80,100,20 );

    invoerLabel.setBounds ( 10,50,120,20 );
    subtotaalLabel.setBounds ( 10,80,120,20 );
    BTWLabel.setBounds ( 10,110,120,20 );
    exBTWLabel.setBounds ( 10,140,120,20 );
    totaalLabel.setBounds ( 10,170,120,20 );



    // Voeg de componenten toe aan het paneel
    add (invoerVak);
    add (subtotaalVak);
    add (BTWVak);
    add (exBTWVak);
    add (totaalVak);
    add (totaalKnop);
    add (resetKnop);
    add (invoerLabel);
    add (subtotaalLabel);
    add (BTWLabel);
    add (exBTWLabel);
    add (totaalLabel);

  }


  class KnopHandler1 implements ActionListener 
  {
    public void actionPerformed( ActionEvent e ) 
    {
        String invoer = invoerVak.getText();
        double invoerBedrag = Double.parseDouble (invoer);

        //hiermee stop je het bedrag in het kassasysteem.
        telOp (invoerBedrag);
        berekenBTW();
        berekenSubtotaalExBTW();

        double totaal = (getSubtotaal() + berekenBTW()); //<--- Issue here.
        System.out.println("Totaal == " + totaal);
    }
  }

  class KnopHandler2 implements ActionListener 
  {
    public void actionPerformed( ActionEvent e ) 
    {
        reset();
    }
  }

public static void main(String...banana)
{
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.add(new Kassapaneel());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
}

}

要详细说明//&lt;--- Issue here 的评论,你打电话给kassa.getSubtotaal。我将其更改为getSubtotaal()。前者表明Kasaa 类中有一个字段——例如:public double getSubtotal = 0; 这不存在,而是一个方法,所以你应该在最后调用kassa.getSubtotaal() 并带有()。除此之外,您还试图设置一个变量 kasaa.total,而该变量与 Kasaa 类中的该方法或变量没有相似之处。

【讨论】:

  • 还是不行,现在是什么问题? “这里的问题”是什么?
  • @Lucafraser 此代码的目的是解决您的Method cannot be resolved or is not a field 问题。如果您还有其他问题,则超出您的问题范围。
  • @Lucafraser 我现在看到按钮的功能将无法正常工作,因为您没有从 JTextFields 获取值,在您的 ActionListener 中,您应该调用 Double.parseDouble(subtotaalVak.getText());
猜你喜欢
  • 2022-01-09
  • 2014-03-27
  • 2014-01-05
  • 2016-05-20
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多