按钮单击时修改变量/其他摆动对象

时间:2011-06-24 20:01:57

标签: java swing button click

好吧基本上我很难用Java Swing JButton执行一些操作。我觉得我的问题很容易让熟练的程序员对我的“基本”问题感到茫然:

我想做的是修改其他JComponent的内容,并可能在按钮点击时修改一些变量。看起来相对简单,但我想在“已经声明”的变量(或已经创建的JComponents)上执行它

无论我在哪里搜索,我都会得到一些案例,其中一切都是从头开始在与特定JButton相关的ActionPerformed函数的实现中声明的,就像这里一样:

http://zetcode.com/tutorials/javaswingtutorial/swingevents/ //上面你可以看到在“actionPerformed”函数中它们定义了新的变量,例如:string / date / locale / stringbuffer

这种解决方案无论如何都无法满足我的需求。我想修改/显示先前由于用户点击而使用属于不同类的函数定义的变量。

好吧也许我会更清楚地向您展示我想在示例源代码上做些什么:

class Number_String {

    public String change_add_MOD (String sss){        
        String str_modified = sss + "_modified";        
        return str_modified;
    }
    public int change_plus1 (int z){        
        int z_modified = z + 1;
        return z_modified;
    }
    public static void main(String[] args) {
        // TODO code application logic here
    }
}

public class probTESTswing extends javax.swing.JFrame {

    public probTESTswing() {
        initComponents();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        jLabel1.setText("done");         
        jLabel2.setText(mystring2);        
        jLabel3.setText(ns.change_add_MOD(mystring3));
    }

    public static void main(String args[]) {        

        Number_String ns=null;
        String first_str="myFIRSTstring";        
        String mystring2 = ns.change_add_MOD(first_str);
        String mystring3 = "third_str";

        probTESTswing testing= new probTESTswing();
        testing.setVisible(true);
    }
}

向所有努力到达的人致以问候;)

所以简单地解释一下:

主类是“swing gui”,在main()函数中我使用第二类初始化一些变量,现在我想用我的Number_String类显示“处理”这些变量的结果,但Java拒绝合作作为我的编程你可能已经注意到,技能缺乏一些基本知识。

你可以观察到我想以两种方式做“它”:在jButton1ActionPerformed内部我想从我的Number_String类(使用'mystring3')访问函数,以及我想要的另一种方式只访问先前定义的变量(mystring2)

任何帮助都很受欢迎。

  • 我应该“重载”jButton1ActionPerformed函数(为了将变量作为参数)? (是的,我知道它的私有 - >我用Netbeans Swing设计师创建它) - 我应该手工设计我的GUI然后重载它们吗? (不知道你是否有可能超载)

  • 或者我应该为我想要使用我的Jbutton修改的变量定义一些“缓冲区”(整数字段和字符串字段),然后将它们放在“probTESTswing”类中? (+编写适当的函数来处理其他类,以便我使用它的函数?)

  • 或者可能(因为我的Number_String没有任何变量 - 只是函数)将这些函数移动到GUI类(probTESTswing)

  • 或许我应该使用一些指针/参考? (是的,似乎这就是我需要的东西,不幸的是指针/参考是我一无所知的东西:(但是我想学习它很多,因为它似乎是我现在发现的强制性 - 很难找到你的教程,因为据我所知,没有指针,我不知道如何以这种方式使用引用,以便实现所需的功能 - 正如你从我的问题中看到的那样)

  • 或者可能有完全不同的方式来处理这些问题/案件?

请高兴我,我想以一种良好的编程方式“高效”地解决我的问题,以便学习高效,优化,适当和快速的解决方案,但是我非常渴望得到帮助,所以我们非常感谢任何建议。

问候

2 个答案:

答案 0 :(得分:2)

一种方法是使用Model–View–Controller模式将数据模型与视图分开,讨论here

附录:更简单地说,您可能只需要给班级ProbTestSwing一个合适的成员变量:

private Number_String ns = new Number_String();

答案 1 :(得分:0)

像几乎所有摇摆组件一样,

JButtons有很多叫做“ActionListeners”的东西。这些ActionListeners是实现名为... ActionListener的接口的类!他们有一个名为actionPerformed的方法。每次单击该按钮时,他都会告诉每个ActionListeners调用其actionPerformed函数。因此,您为按钮指定一个ActionListener,然后使其actionPerformed方法进行所需的所有更改。

就好像每当你的门铃响起时,你(就像JButton一样)会打电话给所有那些绝望的亲戚,他们认为没有人会去拜访你。事实上,他们告诉你,每次门铃响起,他们都会付钱给你。所以门铃响了(点击按钮),你(JButton)打电话给你的亲戚(ActionListeners),然后每个人都付钱给你(actionPerformed方法)。

代码示例:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Test implements ActionListener{
    int count = 0;
    public static void main(String[] args){
        JFrame frame = new JFrame();
        JButton button = new JButton();

        button.addActionListener(new Test());
        button.setText("I have been clicked 0 times");

        frame.setSize(200, 50);
        frame.add(button);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        JButton button = (JButton) (arg0.getSource());
        count++;
        button.setText("I have been clicked "+count+" times");
    }


}