Błąd "non-static method" przy wywołaniu funkcji

0
class btn {
public void funkcja(int indeks, JButton[] Guziki)
{                        
    for (int i=0; i<Guziki.length; i++) 
        { 
            if (i == indeks) 
                Guziki[i].setEnabled(true); 
            else 
                Guziki[i].setEnabled(false); 
        } 
}
}

wywołanie metody:

btn.funkcja(1, Guziki1);

Dlaczego wyrzuca mi błąd w linijce gdzie jest wywołana metoda.

error: non-static method funkcja(int,JButton[]) cannot be referenced from a static context
btn.funkcja(1, Guziki1);

Co mam źle i muszę poprawić?

Z góry dzięki za pomoc.

0
public static void funkcja(int indeks, JButton[] Guziki)
0

Spróbuj

new btn().funkcja(1);

Chociaż nie jestem pewny czy zadziała bo kod wyznacza nowe standardy wtf :).

0

To wtedy jest jakiś inny błąd

 error: method funkcja in class btn cannot be applied to given types;
 new btn().funkcja(1);
 required: int,JButton[]
 found: int
 reason: actual and formal argument lists differ in length

dodanie znacznika <code class="none"> - @furious programming

0

A nie ort! przypadkiem tej swojej klasy btn i tej funkcji w jakas inna statyczna klase/metode?

0

Sorki, zaraz spadam sprzed kompa. Tak na pierwszy rzut oka to rzeczywiscie nowy standard wtf:) Ale don't worry. kazdy cos takiego stworzyl (albo tworzy:D). Nie wiem dlaczego wrzuciles ta klase button do metody?! I ta klasa sklada sie tylko z tej metody? Dlaczego jest w srodku jakby z kosmosu?:) Ogolnie - przeczytaj jeszcze raz o statycznym kontekscie. I cos o obiektch. Od razu bedziesz wiedzial dlaczego ten kod wyrzuca wyjatek.
Pozdrawiam na nowej drodze ;)

PS: Czy moze sie nawiasiki pomylaly?

2
package kalkulator;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

class zmienne {

    public static boolean dodawanie = false;
    public static boolean odejmowanie = false;
    public static boolean mnozenie = false;
    public static boolean dzielenie = false;

    public static double a, b, ab;
    public static double p;
    public static double aa, bb;
    public static String tekst;
}

public class Kalkulator {

    JTextField wyswietl;
    boolean znak = false;

    JFrame frame = new JFrame("Kalkulator");

    public Kalkulator() {
        frame.setSize(270, 305); // rozmiar okienka
        frame.setLocation(470, 280); // Gdzie ma pojawiać się okienko
        frame.setResizable(false); //zablokowanie możliwości rozszeżania
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null); // sami ustawiamy co gdzie ma być, by nie robiła tego za nas java

        wyswietl = new JTextField("");
        wyswietl.setBounds(10, 10, 247, 50); //gdzie ma być to pole i jakich ma być wymiarów
        wyswietl.setHorizontalAlignment(JTextField.RIGHT);  // text od prawej
        frame.add(wyswietl); //dodanie pola do frame

        btn_1.setBounds(10, 170, 45, 45);
//itd
        frame.add(btn_wynik);
//itd.        
        btn_wynik.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                zmienne.ab = 0;

                if (zmienne.dodawanie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a + zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.odejmowanie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a - zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.mnozenie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    zmienne.ab = zmienne.a * zmienne.b;
                    wyswietl.setText(Double.toString(zmienne.ab));
                } else if (zmienne.dzielenie) {
                    zmienne.b = Double.parseDouble(wyswietl.getText());
                    if (zmienne.b != 0) {
                        zmienne.ab = zmienne.a / zmienne.b;
                        wyswietl.setText(Double.toString(zmienne.ab));
                    } else {
                        wyswietl.setText("Nie mozna dzielić przez 0");
                        funkcja(1, Guziki);
                    }
                }
            }
        });
    }

    JButton btn_1 = new JButton("1");
    JButton btn_2 = new JButton("2");
    JButton btn_3 = new JButton("3");
    JButton btn_4 = new JButton("4");
    JButton btn_5 = new JButton("5");
    JButton btn_6 = new JButton("6");
    JButton btn_7 = new JButton("7");
    JButton btn_8 = new JButton("8");
    JButton btn_9 = new JButton("9");
    JButton btn_0 = new JButton("0");
    JButton btn_c = new JButton("C");
    JButton btn_dodawanie = new JButton("+");
    JButton btn_odejmowanie = new JButton("-");
    JButton btn_mnozenie = new JButton("*");
    JButton btn_dzielenie = new JButton("/");
    JButton btn_procent = new JButton("%");
    JButton btn_pierwiastek = new JButton("√");
    JButton btn_wynik = new JButton("=");

    JButton[] Guziki = {btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_0, btn_dodawanie, btn_odejmowanie, btn_mnozenie, btn_dzielenie, btn_wynik, btn_procent, btn_pierwiastek, btn_c};

    public static void main(String[] args) throws ArithmeticException {

        new Kalkulator().frame.setVisible(true);
    }

    public void funkcja(int indeks, JButton[] Guziki) {
        for (int i = 0; i < Guziki.length; i++) {
            if (i == indeks) {
                Guziki[i].setEnabled(true);
            } else {
                Guziki[i].setEnabled(false);
            }
        }
    }
}

0

myslę, że chodziło Ci o

public void funkcja(int indeks, JButton[] Guziki) {
  for(JButton btn: Guziki) btn.setEnabled(false);
  Guziki[indeks].setEnabled(true);
}

ten if ciągle w pętli jest niepotrzebny.
Poza tym klasy umieszczaj w osobnych plikach - w tym samym możesz umieszczać tylko klasy prywatne a chyba nie o to Ci chodziło, dopiero w klasie kalkulator zadeklaruj metode 'funkcja' (nie będzie wtedy statyczna),
zmień nazwę metody funkcja,
poczytaj jeszcze raz o co chodzi w programowaniu obiektowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1