一个 class 调用另一个方法
One class calling another's method
为了整理我的(非常基本的)UI 代码,我将按钮和文本字段拆分为两个单独的 classes,其中一个主要用于创建框架,运行。该按钮需要在单击时影响文本字段的内容,所以我使用了 mouseEvent
。但是,我不能调用我的文本域的方法,因为文本域对象存储在 main 中,所以没有对象可以使用方法。所有方法都是 public,所有属性都是私有的。感谢所有帮助,谢谢。
我已经尝试制作对象 public statiic
无济于事,我不确定这里是否遗漏了一些非常明显的东西。
Fpor 上下文,mouseEvent
需要从 class gui1
中称为 tf 的文本字段对象调用方法 rename(String)
编辑:
(主要)
public interface gui1{
public static void main(String[] args) {
textfieldobj tf = new textfieldobj("You should press button 1",100,100, 150,20);
buttonObject b = new buttonObject("new button!");
(在按钮对象中class)
public class buttonObject extends JButton implements{
JButton b;
public buttonObject(String text){
JButton b=new JButton(text);
b.setBounds(100,100,60,60);
b.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
tf.setText("You Did It");//problem area
b.setEnabled(false);
(在文本字段中 class)
public void setText(String newtext) {
text = newtext;
super.setText(newtext);
}
textfieldobj
buttonObject
你为什么要重新发明所有这些轮子? JTextField
和 JButton
是代表文本字段和按钮的 类,您不需要围绕这些做无用的包装。
The button needs to affect the contents of the text field when clicked
这是糟糕的设计;您不希望您的按钮需要了解文本字段;如果是这样,除了修改那个确切的文本字段之外,没有办法使用所述按钮做任何事情。
so i have used a mouseEvent.
是的,就是这样。但是,只是.. 在知道按钮和字段的地方添加监听器。这可能是主要的,但这让我们想到了另一点:
public static void main(...
这里不是写代码的地方。创建一个对象,在其上调用一些 'go' 方法,这就是你的 main 应该有的一行。你想尽快离开static
,你就是这样做的。
所以,类似于:
public class MainApp {
// frames, layout managers, whatever you need as well
private final JButton switchTextButton;
private final JTextField textField;
public MainApp() {
this.switchTextButton = new JButton("Switch it up!");
this.textField = new JTextField();
// add a panel, add these gui elements to it, etc.
setupListeners();
}
private void setupListeners() {
// hey, we have both the button and the textfield in scope here.
switchTextButton.addActionListener(evt -> {
textField.setText("Hello!");
});
}
}
为了整理我的(非常基本的)UI 代码,我将按钮和文本字段拆分为两个单独的 classes,其中一个主要用于创建框架,运行。该按钮需要在单击时影响文本字段的内容,所以我使用了 mouseEvent
。但是,我不能调用我的文本域的方法,因为文本域对象存储在 main 中,所以没有对象可以使用方法。所有方法都是 public,所有属性都是私有的。感谢所有帮助,谢谢。
我已经尝试制作对象 public statiic
无济于事,我不确定这里是否遗漏了一些非常明显的东西。
Fpor 上下文,mouseEvent
需要从 class gui1
rename(String)
编辑:
(主要)
public interface gui1{
public static void main(String[] args) {
textfieldobj tf = new textfieldobj("You should press button 1",100,100, 150,20);
buttonObject b = new buttonObject("new button!");
(在按钮对象中class)
public class buttonObject extends JButton implements{
JButton b;
public buttonObject(String text){
JButton b=new JButton(text);
b.setBounds(100,100,60,60);
b.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
tf.setText("You Did It");//problem area
b.setEnabled(false);
(在文本字段中 class)
public void setText(String newtext) {
text = newtext;
super.setText(newtext);
}
textfieldobj
buttonObject
你为什么要重新发明所有这些轮子? JTextField
和 JButton
是代表文本字段和按钮的 类,您不需要围绕这些做无用的包装。
The button needs to affect the contents of the text field when clicked
这是糟糕的设计;您不希望您的按钮需要了解文本字段;如果是这样,除了修改那个确切的文本字段之外,没有办法使用所述按钮做任何事情。
so i have used a mouseEvent.
是的,就是这样。但是,只是.. 在知道按钮和字段的地方添加监听器。这可能是主要的,但这让我们想到了另一点:
public static void main(...
这里不是写代码的地方。创建一个对象,在其上调用一些 'go' 方法,这就是你的 main 应该有的一行。你想尽快离开static
,你就是这样做的。
所以,类似于:
public class MainApp {
// frames, layout managers, whatever you need as well
private final JButton switchTextButton;
private final JTextField textField;
public MainApp() {
this.switchTextButton = new JButton("Switch it up!");
this.textField = new JTextField();
// add a panel, add these gui elements to it, etc.
setupListeners();
}
private void setupListeners() {
// hey, we have both the button and the textfield in scope here.
switchTextButton.addActionListener(evt -> {
textField.setText("Hello!");
});
}
}