0

申し訳ありませんが、これがばかげた質問の場合。

にあるrunメソッドを呼び出す方法を知りたいのですが

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

クラスAdaugaComanda.javaから。

runメソッドはFereastraPrincipala.javaで宣言されており、これをAdaugaComanda.javaから呼び出して、AdaugaChitanta.javaのテキストフィールドに値を導入した後にFereastraPrincipalaに変更が表示されるようにします。メソッドを呼び出さない場合は、JTabbedPaneで新しい情報を表示するために、FereastraPrincipala.javaを再度実行する必要があります。

これが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);
        }
    });
}

多分誰かが私を助けることができます。大いに感謝する!

4

2 に答える 2

3

FereastraPrincipala を AnduagaChitanta のメンバー変数にすることができます。

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

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

実行メソッドで()

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

注入方法が気になる方はこちら

public class AnduagaChitanta { FereastraPrincipala fPrincipala

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

必要に応じて、FereastraPrincipala にインターフェイスを実装させて、コンストラクターの定義を次のようにすることができます。

public AnduagaChitanta(ISomethingPrinicipala fPrinicipala)

しかし、今はデザインパターンに入っているので、それはそのままにしておきます.

更新更新 後、次のようにします。

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

}

どこかはわかりませんが、おそらくあなたの AnduagaChitanta クラスで私はこれを行うでしょう

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

それが理にかなっていることを願っています

于 2012-09-15T13:52:34.963 に答える
0

run()スレッドのメソッドを呼び出さないでください。現在のスレッド自体で実行されます!! 常にstart()メソッドを呼び出します。start()あなたのケースに来て、新しいクラスを作成して、他の場所から呼び出すことができるようにします

于 2012-09-15T13:55:16.373 に答える