簡體   English   中英

JButton文本不變

[英]JButton text not changing

所以我的代碼基本上有一個帶有一些文本字段和一個JButtonJPanel ,當用戶點擊按鈕時它轉到按鈕監聽器,然后從文本字段中獲取數據並處理它,創建JLabels ,它將它添加到另一個看不見的JPanel 然后,我使第一個JPanel不可見,並使第二個面板可見,揭示我生成的“結果”。

這一切都有效,但問題是,當我的程序處理從文本字段獲取的數據時,我希望JButton改變它所說的內容,我已經嘗試過使用event.getSource().setText() ,我能夠發現它正在更改按鈕文本(通過打印到控制台),但它沒有更新帶有更改文本的按鈕。

在此之后我嘗試了所有形式的重新驗證並重新繪制和驗證,但沒有一個工作。 有任何想法嗎? 謝謝!

//entryPanel is the first panel, and picksPanel is the second panel
button.addActionListener(new ActionListener()
                           {

  public void actionPerformed(ActionEvent event)
  {
    ((JButton)event.getSource()).setText("Thinking...");
    revalidate();
    repaint();
    try
    {    
      CriticPick picks = new CriticPick(cityfield.getText(),statefield.getText());
      LinkedList<Movie> pickslist = picks.getList();
      glayout.setRows(pickslist.size()+2+thepicks.movnum);
      picksPanel.add(new JLabel("The Results:"));

      //In my actual code I do a bunch of processing and looping that results in jlabels being added to picksPanel
      for (int i=0;i<pickslist.size();i++)
      {
          JLabel label = new JLabel(pickslist.get(i).title);
          picksPanel.add(label);
      }  
    }
    catch (Exception exc)
    {
      System.out.println(exc);
    }

    entryPanel.setVisible(false);
    picksPanel.setVisible(true);

  }});

  guiFrame.add(entryPanel);
  guiFrame.add(picksPanel);
  guiFrame.setLayout(new FlowLayout(FlowLayout.LEFT));
  guiFrame.setVisible(true);
}

原因是在作業完成之前沒有處理任何繪制事件,因此當您認為它時, setText的效果將不會顯示。

repaint()只承諾“盡快”重新繪制(根據文檔),但由於繪制事件在與按鈕單擊事件(“事件調度線程”)相同的線程上處理,因此您的處理有效地導致setText調用和面板隱藏/顯示在作業完成同時發生(可以這么說)。

如果您的工作需要相當長的時間,那么阻止EDT與數據運算工作的效果是顯而易見的 - 由於EDT沒有任何機會重新繪制,處理調整大小/鼠標點擊事件等,UI將變得完全沒有響應。

重處理應該在后台線程中完成,最好是借助SwingWorker 這使EDT可以自由處理油漆(和其他)事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM