为什么在 swing 中使用 public 静态文本字段
Why use public static textfields in swing
我有一个问题,我目前正在学习 java swing/awt
我正在创建一个小程序,有 2 个 jtextfields 和 1 个 jbutton
我用了 2 个 类,1 个用于 GUI,另一个用于 LOGIC/IMPLEMENTATIONS
我在 class1 中声明了一个按钮并对其应用了一个动作侦听器,在 class2(扩展 class1)中我创建了一个方法来进行这种比较
MaisamCustom 是我的 class1,LogicClass 是 class2
此屏幕截图来自 MaisamCustom(Class1),调用此方法的按钮
现在真正的问题是,当我输入 2 个 different/same 值并按下按钮时,它会在 IF 语句中显示消息,否则无法正常工作
两个字段匹配!!!
所以我用谷歌搜索了一下,经过几个小时的搜索,我在 Whosebug 上找到了答案
这个叫@Azuu 的人轻松地回答了一个类似的问题
--> Get value from JPanel textfield in another class
所以我对我的 JTEXTFIELDS 对象声明做了同样的事情并且成功了!! :')
我很高兴,真的要感谢这个人 (@Azuu)。
现在是问题
我知道静态是做什么的,什么是public
但是我的程序是如何通过使 jtextfields public 静态
开始完美运行的
谁能给我解释一下:)
是的,这是代码
(它真的搞砸了,因为我正在它上面试验 GUI 的不同方面)
Class 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 !!");
}
}
}
im really sorry , my question is so simple but i have to explain it
into detail so that is what making it so long, i actually love to
explain my problems step by step and with details
我几个月前以同样的方式发布了一个问题(有时用户会变得粗鲁,他们会非常严厉地责骂你,所以所有的解释都是为了防止这种情况发生)
关于public
protected
也可以。它只需要从您的 LogicClass 可见。
关于静态:
每次使用回车按钮时,都会创建一个新的 LogicClass 对象。如果 txt1
和 txt2
不是静态的,您将创建没有文本的新 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 !!");
}
}
}
另一种方法是显式使用扩展 class:
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...");
}
}
}
我有一个问题,我目前正在学习 java swing/awt
我正在创建一个小程序,有 2 个 jtextfields 和 1 个 jbutton
我用了 2 个 类,1 个用于 GUI,另一个用于 LOGIC/IMPLEMENTATIONS
我在 class1 中声明了一个按钮并对其应用了一个动作侦听器,在 class2(扩展 class1)中我创建了一个方法来进行这种比较
MaisamCustom 是我的 class1,LogicClass 是 class2
此屏幕截图来自 MaisamCustom(Class1),调用此方法的按钮
现在真正的问题是,当我输入 2 个 different/same 值并按下按钮时,它会在 IF 语句中显示消息,否则无法正常工作
两个字段匹配!!!
所以我用谷歌搜索了一下,经过几个小时的搜索,我在 Whosebug 上找到了答案
这个叫@Azuu 的人轻松地回答了一个类似的问题
--> Get value from JPanel textfield in another class
所以我对我的 JTEXTFIELDS 对象声明做了同样的事情并且成功了!! :')
我很高兴,真的要感谢这个人 (@Azuu)。
现在是问题
我知道静态是做什么的,什么是public
但是我的程序是如何通过使 jtextfields public 静态
开始完美运行的谁能给我解释一下:)
是的,这是代码 (它真的搞砸了,因为我正在它上面试验 GUI 的不同方面)
Class 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 !!");
}
}
}
im really sorry , my question is so simple but i have to explain it into detail so that is what making it so long, i actually love to explain my problems step by step and with details
我几个月前以同样的方式发布了一个问题(有时用户会变得粗鲁,他们会非常严厉地责骂你,所以所有的解释都是为了防止这种情况发生)
关于public
protected
也可以。它只需要从您的 LogicClass 可见。
关于静态:
每次使用回车按钮时,都会创建一个新的 LogicClass 对象。如果 txt1
和 txt2
不是静态的,您将创建没有文本的新 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 !!");
}
}
}
另一种方法是显式使用扩展 class:
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...");
}
}
}