2016-05-11 13 views
-3

私は3つのクラスを持っています。スタートクラス、kassaクラス、kassapaneelクラスです。 kassapaneelは私のパネルです、私が正しいならグラフィカルな側面です。私のkassaクラスではgetSubtotaalというメソッドがありますが、それは私のkassapaneelに拡張されていますが、それを認識していないようです。 berekenBTWでも同じです。そしてtotaal変数も。メソッドが解決できないか、フィールドではありません

マイkassaクラス:

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(); 

    } 
    } 

} 
+0

解決できない方法はどこですか? – Gendarme

+0

解決できない方法ですか?私は 'kassa.totaal =(kassa.getSubtotaal + kassa.berekenBTW);を見ています。これにより問題が発生します。 'Kasaa'クラスでは、' totaal'という公共変数はありません。 –

+1

さらに、Kassaクラスを拡張していますが、Kassaクラスの属性を定義しています。これは望ましい行動ですか? –

答えて

0

ここにあなたの問題のいくつかを解決しようとする試みです:

ので、私は、Kasaaオブジェクトを削除Kassapaneel extends Kasaa。つまり、あなたはKasaa内の保護された+メソッドとフィールドにアクセスできます。あなたが経験している問題はKnopHandler1 ActionListener内にあると思います。存在しなかったフィールドを呼び出そうとしていましたが、最後に括弧がないためメソッドではありませんでした。コメント//<--- Issue hereについては詳しく説明し

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); 
} 

} 

、あなたはkassa.getSubtotaalを呼んでいました。これをgetSubtotaal()に変更しました。前者は、Kasaaクラス内にフィールドがあることを示唆しています。例:public double getSubtotal = 0;これは存在しません。代わりにメソッドであるため、末尾に()を指定してkassa.getSubtotaal()を呼び出す必要があります。これに加えて、kasaa.totalという変数を、Kasaaクラス内にこのメソッドまたは変数の類似点がない場所に設定しようとしていました。

+0

まだ動作しませんが、現在問題は何ですか?そして、「ここの問題」は何ですか? – Lucafraser

+0

@Lucafraserこのコードの目的は、「方法は解決できないか、フィールドではない」問題を解決することでした。これ以上の問題がある場合は、あなたの質問の範囲外です。 –

+0

@Lucafraser「JTextFields」から値を取得していないため、ボタンの機能が正しく動作しないことがわかりました。あなたのActionListenerでは、 'Double.parseDouble(subtotaalVak.getText()); –

関連する問題