2017-02-19 21 views
0

我是java中的初學者,我正嘗試在java中創建數據包跟蹤器,現在我正在用eclipse啓動GUI。我想改變我的按鈕名稱開始重新啓動,並恢復暫停動作監聽器我不知道如何更改按鈕的名稱任何人都可以幫助我? 我的代碼是在java中啓動我的小型項目數據包跟蹤器時遇到困難

Jbutton btnResume = new Jbutton("Resume"); 
brnResume.addChangeListener(new ChangeListener(){ 
public void stateChanged(ChangeEvent arg0){ 
JButton btnResume = new Jbutton("Pause"); 
}} 

它不工作幫助我用這種方法

+0

JButton中的B應該大寫。否則將會出現語法錯誤。 – krock

+0

要獲得更完整的幫助,請考慮創建併發布有效的[mcve]。 –

+0

請看[爲什麼「有人可以幫我嗎?「不是一個實際的問題?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

回答

2

你想創建與假設這會改變對象的原始變量是指同一名稱的新變量至。這意味着你對什麼對象以及參考變量是如何工作感到困惑。理解原始的btnResume變量引用了JButton對象,並且該對象可能顯示在GUI中。在ChangeListener中(我們不確定它是如何被調用的,或者即使它被調用),你正在創建一個新的JButton對象,並將它分配給一個新的局部變量。請注意,這個新的JButton與當前顯示的不一樣,因此設置新按鈕的文本將不會影響顯示的JButton。

相反,您可能想要使用原始變量,該變量希望位於ChangeListener代碼的範圍內,並且希望仍然引用相同的JButton對象,並在原始對象上調用setText(...)。喜歡的東西:

Jbutton btnResume = new JButton("Resume"); 

brnResume.addChangeListener(new ChangeListener(){ 
    public void stateChanged(ChangeEvent arg0){ 
     // JButton btnResume = new Jbutton("Pause"); 
     btnResume.setText("Pause"); 
    } 
} 

我自己,我會考慮不同的事情:一個新的動作,一個不僅展示了「暫停」文本交換JButton的行動,但還保持着暫停行爲。

請注意,要獲得更完整的幫助,請考慮在您的問題中創建併發布有效的Minimal, Complete, and Verifiable example程序。

例如:

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class SwapActions extends JPanel { 
    private Action resumeAction = new ResumeAction("Resume", KeyEvent.VK_R); 
    private Action pauseAction = new PauseAction("Pause", KeyEvent.VK_P); 
    private JButton resumePauseBtn = new JButton(resumeAction); 

    public SwapActions() { 
     setPreferredSize(new Dimension(400, 300)); 

     add(resumePauseBtn); 
    } 

    private class ResumeAction extends AbstractAction { 
     public ResumeAction(String name, int mnemonic) { 
      super(name); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO resume code here 

      // **** swap Actions here! **** 
      ((AbstractButton) e.getSource()).setAction(pauseAction); 
     } 
    } 

    private class PauseAction extends AbstractAction { 
     public PauseAction(String name, int mnemonic) { 
      super(name); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO pause code here 

      // **** swap Actions here! **** 
      ((AbstractButton) e.getSource()).setAction(resumeAction); 
     } 
    } 

    private static void createAndShowGui() { 
     SwapActions mainPanel = new SwapActions(); 

     JFrame frame = new JFrame("Swap Actions"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 

在AbstractActions,我交換源(這裏將JButton)與這條線的作用:

((AbstractButton) e.getSource()).setAction(resumeAction); 

關於:

我試過第一個,它顯示出將按鈕更改爲最後改變之後的按鈕,然後當我把光標移動到按鈕,它正在改變。我希望它改變了當我點擊它的名字爲什麼不這樣做

你已經有了一個ChangeListener內變化碼,並且這個監聽器不響應按鈕按下。相反,如果您想響應按鈕按鈕,請使用帶有addActionListener(...)的ActionListeners或帶有setAction(...)的AbstractAction(如上所示)。

最重要的是,請閱讀Swing教程,因爲您似乎在做很多猜測,而這隻會導致挫敗感。這些教程非常全面,並且有很好的代碼示例。您可以在此找到指向Swing教程和其他Swing資源的鏈接:Swing Info

+0

感謝兄弟的快速反應我試了第一個,它顯示出改變按鈕後,改變按鈕,然後當我將光標放在按鈕上它正在改變名稱。我希望它改變了,當我點擊它時爲什麼它沒有這樣做 –

+0

@RamaKrishnaPolumuru:請參閱編輯回答,添加到我的答案的底部。 –

+0

好的,我會再次感謝你幫助我 –