gpt4 book ai didi

java - 在java中启动我的迷你项目数据包跟踪器时遇到困难

转载 作者:行者123 更新时间:2023-12-02 03:01:59 25 4
gpt4 key购买 nike

我是java初学者,我正在尝试在java中创建数据包跟踪器,现在我正在使用eclipse启动GUI。我正在尝试更改我的按钮名称开始重新启动并恢复暂停操作监听器我不知道如何更改按钮的名称任何人都可以帮助我吗?我的代码是

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

这个方法不起作用,请帮助我

最佳答案

您尝试创建一个具有相同名称的新变量,并假设这将更改原始变量引用的对象。这意味着您对对象是什么以及引用变量如何工作感到困惑。了解原始 btnResume 变量引用 JButton 对象,并且该对象可能显示在 GUI 中。在 ChangeListener 中(我们不确定它是如何被调用的,或者即使它被调用),您正在创建一个新的 JButton 对象,并将其分配给一个新的局部变量。请注意,这个新的 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 的 Action 替换为新的 Action,该 Action 不仅显示“暂停”文本,而且还保留暂停行为。

请注意,为了获得更好、更完整的帮助,请考虑创建并发布有效的 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);
<小时/>

关于:

i tried the 1st one and it is showing that change the button to final after changed that button then when i placed the cursor on the button it's changing the name .i want it changed when i clicked it why it is not doing that

您已经在 ChangeListener 中获得了更改代码,并且该监听器不会响应按钮按下。相反,如果您想响应按钮按下,请使用带有 addActionListener(...) 的 ActionListeners 或带有 setAction(...) 的 AbstractAction(如我上面所示)。

最重要的是,请阅读 Swing 教程,因为您似乎做了很多猜测,而这只会让您感到沮丧。这些教程非常全面且有帮助,并提供了不错的代码示例。您可以在此处找到 Swing 教程和其他 Swing 资源的链接:Swing Info .

关于java - 在java中启动我的迷你项目数据包跟踪器时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42323399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com