为什么要使用公共静态文本字段

时间:2015-01-09 09:04:08

标签: java swing user-interface static awt

我遇到了问题,我目前正在学习java swing / awt的过程

我正在创建一个小程序,包含2个jtextfields和1个jbutton

我使用了2个类,1个用于GUI,其他用于LOGIC / IMPLEMENTATIONS

我在class1中声明了一个按钮并在其中应用了一个actionlistener,在class2中(扩展了class1)我创建了一个正在进行此比较的方法

MaisamCustom是我的class1,LogicClass是class2

enter image description here

此屏幕截图来自MaisamCustom(Class1),此方法被称为

enter image description here

现在真正的问题,当我输入2个不同/相同的值并按下按钮时,它在IF语句中显示消息,否则无法正常工作

BOTH FIELDS MATCH !!!

所以我用Google搜索,经过数小时的搜索后,我在stackoverflow上找到了答案

这个名叫@Azuu的家伙轻松回答了一个类似的问题

- > Get value from JPanel textfield in another class

enter image description here

所以我用JTEXTFIELDS对象声明和IT工作做了同样的事情! :') enter image description here

我很高兴,真的要感谢这个人(@Azuu)。

现在问题

我知道什么是静态的,什么是公共的

但是我的程序是如何通过创建jtextfields public static

来开始完美的

任何人都可以向我解释:)

是的,这是代码 (它真的搞砸了,因为我正在试验GUI的不同方面)

1级

package gui.examples;


import java.awt.event.*;
import javax.swing.*;

public class MaisamCustom {

    JFrame frame = new JFrame("My Desktop App");
    JPanel panel = new JPanel();
    public static JTextField txt1 = new JTextField(8),
            txt2 = new JTextField(8);
    JButton enter_btn = new JButton("Enter");
    public void launchFrame() {

        JLabel label1 = new JLabel("   "),
                label3 = new JLabel("   "),
                label4 = new JLabel("   "),
                label5 = new JLabel("   "),
                label2 = new JLabel("                  My Comparision Program");
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        panel.add(label3);
        panel.add(label2);
        panel.add(label4);
        panel.add(txt1);
        panel.add(label1);
        panel.add(txt2);
        panel.add(label5);
        enter_btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                LogicClass obj = new LogicClass();
                obj.enterButton();

            }
        });
        panel.add(enter_btn);
        frame.setResizable(false);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }


    public static void main(String[] args) {
        MaisamCustom obj = new MaisamCustom();
        try {
            obj.launchFrame();
        } catch (Exception ex) {
            System.out.println("Some issue while launching the application...");
        }
    }


}

的Class2

package gui.examples;

import javax.swing.JOptionPane;

public class LogicClass extends MaisamCustom {

    public void info(String message, String title) {
        JOptionPane.showMessageDialog(null, message, "PromptBox: " + title, JOptionPane.INFORMATION_MESSAGE);
    }

    public void enterButton() {
        LogicClass obj = new LogicClass();
        if (txt1.getText().equals(txt2.getText())) {
            obj.info("Both Fields Match !!!", "Note !!");
        } else {
            obj.info("Both Fields Do Not Match !!!", "Note !!");
        }
    }

}
  

我很抱歉,我的问题很简单,但我必须解释一下   进入细节,这就是让它如此长久,我真的很喜欢   逐步解释我的问题并提供详细信息

我在几个月前以同样的方式发布了一个问题(有时用户会变得粗鲁,他们会非常努力地骂你,所以所有的解释都只是为了防止这种情况)

enter image description here

1 个答案:

答案 0 :(得分:2)

关于公开

protected也可以。它只需要从你的LogicClass中可见。

关于静态

每次使用enter按钮时,都会创建一个新的LogicClass对象。如果txt1txt2不是静态的,您可以创建没有文字的新JTextField。两个字段始终匹配。它们与对话框中的字段不同。

现在您已将字段设为静态,您将继续使用最初在MaisamCustom对象中创建的原始字段;对话框中的实际字段。

使用public static,您可以简化程序:LogicClass不需要从MaisamCustom扩展:

package gui.examples;

import javax.swing.JOptionPane;

public class LogicClass {

    public void info(String message, String title) {
        JOptionPane.showMessageDialog(null, message, "PromptBox: " + title, JOptionPane.INFORMATION_MESSAGE);
    }

    public void enterButton() {
        LogicClass obj = new LogicClass();
        if (MaisamCustom.txt1.getText().equals(MaisamCustom.txt2.getText())) {
            obj.info("Both Fields Match !!!", "Note !!");
        } else {
            obj.info("Both Fields Do Not Match !!!", "Note !!");
        }
    }

}

另一种方法是明确使用扩展类:

package gui.examples;


import java.awt.event.*;
import javax.swing.*;

public class MaisamCustom {

    JFrame frame = new JFrame("My Desktop App");
    JPanel panel = new JPanel();
    protected JTextField txt1 = new JTextField(8),
            txt2 = new JTextField(8);
    JButton enter_btn = new JButton("Enter");
    public void launchFrame() {

        JLabel label1 = new JLabel("   "),
                label3 = new JLabel("   "),
                label4 = new JLabel("   "),
                label5 = new JLabel("   "),
                label2 = new JLabel("                  My Comparision Program");
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        panel.add(label3);
        panel.add(label2);
        panel.add(label4);
        panel.add(txt1);
        panel.add(label1);
        panel.add(txt2);
        panel.add(label5);
        enter_btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (MaisamCustom.this instanceof LogicClass){
                    LogicClass logicClassObj = (LogicClass)MaisamCustom.this;
                    logicClassObj.enterButton();
                }
            }
        });
        panel.add(enter_btn);
        frame.setResizable(false);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }


    public static void main(String[] args) {
        MaisamCustom obj = new LogicClass();
        try {
            obj.launchFrame();
        } catch (Exception ex) {
            System.out.println("Some issue while launching the application...");
        }
    }


}