类之间的ActionListener?

时间:2014-04-16 10:04:42

标签: java swing jdbc jbutton actionlistener

我有promt.java和gui.java文件。一旦我点击promt上的OK按钮它就会消失并运行db query。我想在gui.java上的JTextField上获取查询结果,尝试使用SetText并从promt.java追加但是没有用。它将查询结果发送到promt中的变量但没有在gui中获取它。

用于OK按钮的Promt Actionlistener

try{
            Class.forName(jdbc_driver);
            con=DriverManager.getConnection(db_url, "root", "");
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            if(rs.next());{
                i = 1;
                id=rs.getString("id")+"";
                ovog=rs.getString("ovog")+"";
                ner=rs.getString("ner")+"";
                cardnum1=rs.getString("card_number")+"";
                val=rs.getString("dvn")+"";
                GUI guu=new GUI();
                guu.screen3.setText("id: "+id +"   "+"ovog"+ovog+"   "+"ner"+ner+"   "+"card number"+cardnum1+"   "+"dun"+val);
            }}

            catch(Exception e){
                System.out.println("Not Found!");
                e.printStackTrace();
            }

GUI Actionlistener

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==card){
        Cardpromt cp=new Cardpromt();
        cp.prompt();
    }

1 个答案:

答案 0 :(得分:0)

Propmpt调用中创建一个新的GUI不会为您做任何事情,因为您正在创建GUI类的新引用,而不是当前正在运行的GUI类。

可以做的事情是在创建时将当前GUI的引用传递给Prompt。更好的情况是使用带有方法的接口来设置文本,GUI可以实现它。像

这样的东西
public interface GuiService {
    public void setScreenText(String text);
}

public class GUI implments GuiService {
    private JLabel screen;

    @Override
    public void setScreeenText(String text) {
        screen.setText(text);
    }
    ...
    public void actionPerformed(ActionEvent e) {
        CardPrompt promt = new CardPrompt(GUI.this);
        prompt.prompt();
    }   
}

public class CardPropmt {
   private GuiService guiService;

   public CardPrompt(GuiService guiService){
       this.guiService = guiService;
   }

   ...
   try {
       ...
       guiService.setScreenText("id: "+id +"   "+"ovog"+ovog+"   "+"ner"+ner+"   "+"card number"+cardnum1+"   "+"dun"+val);
   }
}

通过这种方式,您可以引用当前的GUI类,并通过服务方法访问它的方法setScreenText