항상 수정하려고 시도하고 프로그램이 실행되지 않습니다.콘솔 println을 GUI로 이동하는 동안 정적 컨텍스트에서 비 정적 JLabel을 참조 할 수 없습니다.
문제는 내 프로그램이 콘솔에서 실행될 때 모든 것이 정상이지만 GUI를 만들고 콘솔의 텍스트를 콘솔에서 가져올 때 변수가 작동하지 않는 것입니다. 그들은 있었다.
프로그램
는이 같은 세 가지 패키지가 매우 간단하다 ://class SklepZoologiczny in package sklepzoologiczny
package sklepzoologiczny;
import javax.swing.JFrame;
import zwierzeta.*;
import magazyn.*;
public class SklepZoologiczny {
public static void main(String[] args) {
GUI GUI = new GUI();
GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI.pack();
GUI.setSize(300, 500);
GUI.setVisible(true);
GUI.setTitle("Appka Zaliczeniowa - Sklep Zoologiczny");
GUI.setResizable(false);
GUI.setLocationRelativeTo(null);
}
}
//class GUI in package sklepzoologiczny
package sklepzoologiczny;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import magazyn.*;
import zwierzeta.*;
public class GUI extends JFrame {
public JLabel l_imie, l_gatunek, l_rasa;
public JButton b_dodaj, b_usun, b_lista;
public JTextField tf_imie, tf_gatunek, tf_rasa;
public String imie, gatunek, rasa;
public ArrayList lista_psow, lista_kotow;
public String pies, kot, gatunek_zwierza;
public String imie_psa, rasa_psa;
public String imie_kota, rasa_kota;
public GUI() {
setLayout(new FlowLayout());
b_dodaj = new JButton("Uruchom Program");
add(b_dodaj);
l_imie = new JLabel("Text from console to GUI should go here");
add(l_imie);
event dodanie = new event();
b_dodaj.addActionListener(dodanie);
}
public class event implements ActionListener {
public void actionPerformed(ActionEvent dodanie) {
magazyn magazyn1 = new magazyn();
magazyn1.kasa = 0;
pies pies1 = new pies();
kot kot1 = new kot();
krolik krolik1 = new krolik();
pies1.ustawImie("Max");
kot1.ustawImie("Nuta");
krolik1.ustawImie("Filip");
pies1.ustawCene(200);
kot1.ustawCene(100);
krolik1.ustawCene(50);
pies1.ustawRase("Jamnik");
kot1.ustawRase("Perski");
krolik1.ustawRase("Mini_Lop");
pies1.ustawGatunek("pies");
kot1.ustawGatunek("kot");
krolik1.ustawGatunek("krolik");
System.out.println("Operacje Zakupu Zwierzat");
System.out.println("---");
magazyn1.dodajZwierza(pies1);
magazyn1.dodajZwierza(kot1);
magazyn1.dodajZwierza(krolik1);
magazyn1.StanSklepu();
System.out.println("Transkacje");
System.out.println("---");
magazyn1.sprzedajZwierza("Nuta");
magazyn1.StanSklepu();
}
}
}
//class magazyn in package magazyn
package magazyn;
import java.util.ArrayList;
import zwierzeta.*;
public class magazyn {
public float kasa;
ArrayList <zwierzeta> lista = new ArrayList(20);
public void dodajZwierza(zwierzeta i){
lista.add(i);
sklepzoologiczny.GUI.l_rasa.setText("Do sklepu dodano zwierza o imieniu: " + i.wezImie());
}
public void sprzedajZwierza(String i){
for(int j=0; j<lista.size(); j++){
if(lista.get(j).wezImie() == i){
kasa = kasa + lista.get(j).wezCene();
lista.remove(j);
System.out.println("Sprzedano: " + i);
}
}
}
public void StanSklepu(){
System.out.println("Aktualny stan sklepu:");
for(int i=0; i<lista.size(); i++){
System.out.println(lista.get(i).wezImie()+", " +lista.get(i).wezGatunek()+", " + lista.get(i).wezRase() + ", cena: " + lista.get(i).wezCene());
}
System.out.println("Stan kasy \t\t\t" + kasa);
}
}
//class zwierzeta in package zwierzeta
package zwierzeta;
public abstract class zwierzeta {
String imie, gatunek, rasa;
float cena;
/* public void checkProduct() throws ProductException{
if(isDamaged == true){
ProductException damaged = new ProductException();
damaged.setErrorMessage("Product is damaged:");
throw damaged;
}
}*/
public void ustawImie(String i){
imie = i;
}
public String wezImie(){
return imie;
}
public void ustawGatunek(String i){
gatunek = i;
}
public String wezGatunek(){
return gatunek;
}
public void ustawRase(String i){
rasa = i;
}
public String wezRase(){
return rasa;
}
public void ustawCene(float i){
cena = i;
}
public float wezCene(){
return cena;
}
}
만에없는 코드 zwierzeta를 확장 패키지 zwierzeta에서 세 개의 클래스도 있습니다.
그래서 문제는 magazyn.java의 dodajZwierza에 넣으려고 시도 할 때 정적이 아닌 변수 l_rasa
을 정적 컨텍스트에서 참조 할 수 없다는 오류가 항상 있습니다. 이 문제를 해결하는 방법을 모르겠다. GUI에서 클래스를 정적으로 만들려고 시도했지만 더 많은 오류가 발생하면 더 악화된다.
콘솔 대신 창에 텍스트가 나타나게하려면 어떻게해야합니까? 여기
public JLabel l_imie, l_gatunek, l_rasa;
: 당신은 같은 GUI 클래스에 정의 된 비 정적 변수에 액세스하려고
당신이 최고입니다,이 작품! 이전에 전체 GUI에 정적을 추가하려고 했으므로 오류가 발생했습니다. 하지만 또 다른 질문이 있습니다. 3 줄의 텍스트가 있어야하는데,이 수정으로 마지막 줄만 표시됩니다. 어떻게 실제 3 줄로 나눌 수 있습니까? 어떻게 든 JLabel을 한 줄 이상 길게 만들 수 있습니까? 아니면 다른 종류의 라벨을 사용할 수 있습니까? – user3762968
'public JLabel l_imie, l_gatunek;처럼 다른 두 레이블을 유지하지 마라. 이제 다른 줄에서 정적 버전을'public static JLabel l_rasa'로 사용한다. – SMA
나는 당신이 말한대로 다음과 같이 두 줄을 추가했다. public void 도다 지어에 자 (zwierzeta i) { lista.add (i); sklepzoologiczny.GUI.l_imie.setText (i.wezImie()); sklepzoologiczny.GUI.l_imie2.setText (i.wezImie()); sklepzoologiczny.GUI.l_imie3.setText (i.wezImie()); } 도 레이블이 추가되었지만 실행 후 GUI에있는 테이블의 다양한 3 개가 아니라 동일한 3 개의 동물이 나열됩니다. 콘솔에서 모든 것은 괜찮습니다. 어떤 아이디어? – user3762968