2017-02-19 18 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

好的,我会再次感谢你帮助我 –