gpt4 book ai didi

java - 将控制台 println 移动到 GUI 时,无法从静态上下文引用非静态 JLabel

转载 作者:行者123 更新时间:2023-12-02 05:03:16 26 4
gpt4 key购买 nike

无论我尝试修改什么,总会出现问题,并且程序无法运行。

问题是我的程序工作正常,当它在控制台中启动时,一切正常,但是当我尝试制作 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 中将类设置为静态,但错误越多,情况就越糟。

如何让文本显示在窗口而不是控制台中?

最佳答案

首先 - 您最好避免使用名称与类型名称相同的成员:

GUI GUI = new GUI();

您和 JVM 很可能会对此感到困惑,当您稍后运行以下命令时,不知道您是否正在尝试访问类类型或类实例:

GUI.setVisible(true);

其次,如果你想让一个类访问另一个类的成员,最好提供一个返回(引用)该成员的 getter,而不是将该成员定义为静态并让其他类访问直接就可以了。

关于java - 将控制台 println 移动到 GUI 时,无法从静态上下文引用非静态 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com