好吧基本上我很难用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)
或许我应该使用一些指针/参考? (是的,似乎这就是我需要的东西,不幸的是指针/参考是我一无所知的东西:(但是我想学习它很多,因为它似乎是我现在发现的强制性 - 很难找到你的教程,因为据我所知,没有指针,我不知道如何以这种方式使用引用,以便实现所需的功能 - 正如你从我的问题中看到的那样)
或者可能有完全不同的方式来处理这些问题/案件?
请高兴我,我想以一种良好的编程方式“高效”地解决我的问题,以便学习高效,优化,适当和快速的解决方案,但是我非常渴望得到帮助,所以我们非常感谢任何建议。
问候
答案 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");
}
}