gpt4 book ai didi

java - 如何从另一个类调用run方法?

转载 作者:行者123 更新时间:2023-12-02 00:12:33 25 4
gpt4 key购买 nike

抱歉,如果这是一个愚蠢的问题。

我想了解如何调用位于

的run方法
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FereastraPrincipala().setVisible(true);

来自 AdaugaComanda.java 类。

run 方法在 FereastraPrincipala.java 中声明,我想从 AdaugaComanda.java 调用此方法,以便在从 AdaugaChitanta.java 的文本字段中引入值后可以看到 FereastraPrincipala 的更改。如果我不调用方法,那么我必须再次运行 FereastraPrincipala.java,以便在 JTabbedPane 中查看新信息。

这是 FereastraPrincipala.java 的代码

 package sakila.ui;

import java.util.List;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import org.hibernate.Session;
import sakila.entity.*;
import sakila.util.HibernateUtil;

public class FereastraPrincipala extends javax.swing.JFrame {

public FereastraPrincipala() {
initComponents();
}

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
AdaugaComanda ac = new AdaugaComanda();
ac.setVisible(true);
}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new FereastraPrincipala().setVisible(true);
Session session = HibernateUtil.getSessionFactory().openSession();

try{

List<Comanda> comenzi = session.createQuery("from Comanda").list();

Vector<String> tableHeaders = new Vector<String>();
Vector tableData = new Vector();
tableHeaders.add("IdComanda");
tableHeaders.add("Depozit");
tableHeaders.add("Furnizor");
tableHeaders.add("Client");
tableHeaders.add("Produs");
tableHeaders.add("Cantitate");
tableHeaders.add("Unit de mas");

for (Comanda comanda : comenzi) {
Vector <Object> oneRow = new Vector <Object>();
oneRow.add(comanda.getIdcomanda());
oneRow.add(comanda.getDepozit() == null ? "" : comanda.getDepozit().toString());
oneRow.add(comanda.getFurnizor() == null ? "" : comanda.getFurnizor().toString());
oneRow.add(comanda.getClient() == null ? "" : comanda.getClient().toString());
oneRow.add(comanda.getProdus() == null ? "" : comanda.getProdus().toString());
oneRow.add(comanda.getCantitate());
oneRow.add(comanda.getUnitmas());

tableData.add(oneRow);

}
ComandaTable.setModel(new DefaultTableModel(tableData, tableHeaders));

}catch (Exception he){
he.printStackTrace();
}
}
});
}

}

这是 AdaugaComanda.java 的代码

   package sakila.ui;

import java.io.EOFException;
import java.util.List;
import sakila.entity.*;
import sakila.service.Functie;
import sakila.entity.Client;

public class AdaugaComanda extends javax.swing.JDialog {

public AdaugaComanda() {
initComponents();
initComboBoxes();
}

private void initComboBoxes() {

DepozitComboBox.removeAllItems();
FurnizorComboBox.removeAllItems();
ClientComboBox.removeAllItems();
ProdusComboBox.removeAllItems();

System.out.println("sterge itemurile");

List<Depozit> depozite = (List<Depozit>) sakila.client.Client.citeste(Functie.LISTEAZA_DEPOZITE);
for (Depozit depozit : depozite)
DepozitComboBox.addItem(depozit);

List<Furnizor> furnizori = (List<Furnizor>) sakila.client.Client.citeste(Functie.LISTEAZA_FURNIZORI);
for (Furnizor furnizor : furnizori)
FurnizorComboBox.addItem(furnizor);

List<Client> clienti = (List<Client>) sakila.client.Client.citeste(Functie.LISTEAZA_CLIENTI);
for (Client client : clienti)
ClientComboBox.addItem(client);

List<Produs> produse = (List<Produs>) sakila.client.Client.citeste(Functie.LISTEAZA_PRODUSE);
for (Produs produs : produse)
ProdusComboBox.addItem(produs);
System.out.println("adaugaitemuri");

}

private void ClientComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void InsereazaButtonActionPerformed(java.awt.event.ActionEvent evt) {
runQueryBasedOnInsert();
}

private void runQueryBasedOnInsert(){

Comanda comanda = new Comanda();

Depozit depozit = (Depozit)DepozitComboBox.getSelectedItem();
comanda.setDepozit(depozit);

Furnizor furnizor = ((Furnizor)FurnizorComboBox.getSelectedItem());
comanda.setFurnizor(furnizor);

sakila.entity.Client client = ((sakila.entity.Client)ClientComboBox.getSelectedItem());
comanda.setClient(client);

Produs produs = ((Produs)ProdusComboBox.getSelectedItem());
comanda.setProdus(produs);

comanda.setCantitate(Integer.parseInt(CantitateTextField.getText()));
comanda.setUnitmas(UnitMasTextField.getText());

sakila.client.Client.scrie(Functie.CREAZA_COMANDA, comanda);

}

 public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new AdaugaComanda().setVisible(true);
}
});
}

也许有人可以帮助我。万分感谢!

最佳答案

您可以将 FereastraPrincipala 设置为 AnduagaChitanta 的成员变量。

public class  AnduagaChitanta
{
FereastraPrincipala fPrincipala = new FereastraPrincipala (); //Or inject it into the constructor

private void SomeMethod()
{
fPrincipala.run();
}
}

在run方法()中

public void run()
{
setvisible(true);
}

如果您想知道如何注入(inject)它:

公共(public)课AnduagaChitanta { FereastraPrincipala fPrincipala

  public AnduagaChitanta(FereastraPrincipala fPrinicipala)
{
this.fPrinicipala = fPrinicipala;
}
private void SomeMethod()
{
fPrincipala.run();
}
}

如果你愿意,你可以让 FereastraPrincipala 实现一个接口(interface),这样构造函数的定义可以是:

公共(public) AnduagaChitanta(ISomethingPrinicipala fPrinicipala)

但现在我们正在讨论设计模式,所以我就到此为止。

更新更新后我会做这样的事情:

FereastraPrincipala extends JFrame implements Runnable 
{
public void run()
{
setvisible(true) ;
}

}

我不知道在哪里,但也许在你的 AnduagaChitanta 课上我会这样做

public void SomeMethod()
{
java.awt.EventQueue.invokeLater(fPrinicpala)
}

我希望这是有道理的

关于java - 如何从另一个类调用run方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437909/

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