我如何 return 来自函数的 JButton 并使用它在 java 中的不同 class 中执行操作?
How can I return a JButton from a function and use it to do an action in a different class in java?
我如何 return 函数中的 JButton 并使用它在不同的 class 中执行操作,我创建一个库只是为了练习我的 java 技能(我缺少这部分),我试图通过创建对象和函数来处理它来简化创建 JFrames 和 JButtons 的过程,问题是 Frame.java我正在 returning 那里创建的 JButton,然后将它与 ActionListener
一起使用,但问题是,它既不显示错误也不工作,有人可以给我一个解释,如果可能的话,一个解决方案吗?
Ctrl + F:9812934
|从我return JButton 和我使用它。
Main.java
package twopackages;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import lib.Button;
import lib.Frame;
public class Main extends Frame{
public static void main(String[] args ){
Frame frame = new Frame();
Button button = new Button();
frame.width = 400;
frame.height = 300;
frame.title = "title";
frame.visible = true;
button.width = 100;
button.height = 30;
button.title = "button";
button.top = 10;
button.left = 10;
button.visible = true;
frame.addButton(button);
frame.run();
frame.addButton(button).addActionListener(new ActionListener() {//Get JButton returned after calling function (I know it's crappy, but I could not find a way to do something similar) 9812934
public void actionPerformed(ActionEvent arg0) {
System.out.println("sadasdasd");
}
});
}
}
Frame.java
package lib;
import javax.swing.JButton;
import javax.swing.JFrame;
import lib.Button;
public class Frame {
public int width;
public int height;
public String title;
public boolean visible;
JFrame FRAME = new JFrame();
public void run(){
FRAME.setSize(width, height);
FRAME.setTitle(title);
FRAME.setLayout(null);
FRAME.setLocationRelativeTo(null);
FRAME.setVisible(visible);
FRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FRAME.setResizable(false);
}
public JButton addButton(Button button){
JButton BUTTON = new JButton();
BUTTON.setText(button.title);
BUTTON.setBounds(button.left, button.top, button.width, button.height);
BUTTON.setVisible(button.visible);
FRAME.add(BUTTON);
return BUTTON;//Here's where I return the JButton 9812934
}
}
Button.java
package lib;
import javax.swing.JButton;
public class Button{
public int left;
public int top;
public int width;
public int height;
public String title;
public boolean visible;
JButton button = new JButton();
public void button(){
button.setBounds(left, top, width, height);
button.setText(title);
button.setVisible(visible);
}
}
您应该将按钮添加到框架的 contentPane 而不是自己的框架。始终建议在 Panel 级别而不是 swing 中的框架级别工作
您的代码不起作用,因为您创建了 JButton
的两个实例并将它们叠加在一起,这正是 @Andrew 在他的评论中警告您的。当您单击该按钮时,您实际上是在单击没有附加动作侦听器实现的按钮。
这里是相关位:
//frame.addButton(button); // <-- first instance created and added
frame.run();
// ˇ second instance created and added
frame.addButton(button).addActionListener(new ActionListener() {//Get JButton returned after calling function (I know it's crappy, but I could not find a way to do something similar) 9812934
public void actionPerformed(ActionEvent arg0) {
System.out.println("sadasdasd");
}
});
只需注释第一次调用即可修复框架的客户端代码。
尝试简化 Swing 是您自己承担的一项苦差事。感谢你。传递 JButton 对象并没有错,只要确保传递正确的对象即可。
注意:您正在从一个非事件调度线程的线程调用 Swing 代码。如果您的新框架有任何希望正常工作,您将需要修复它(将所有内容包装在 SwingUtilities.invokeLater(Runnable) 中)。
我如何 return 函数中的 JButton 并使用它在不同的 class 中执行操作,我创建一个库只是为了练习我的 java 技能(我缺少这部分),我试图通过创建对象和函数来处理它来简化创建 JFrames 和 JButtons 的过程,问题是 Frame.java我正在 returning 那里创建的 JButton,然后将它与 ActionListener
一起使用,但问题是,它既不显示错误也不工作,有人可以给我一个解释,如果可能的话,一个解决方案吗?
Ctrl + F:9812934
|从我return JButton 和我使用它。
Main.java
package twopackages;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import lib.Button;
import lib.Frame;
public class Main extends Frame{
public static void main(String[] args ){
Frame frame = new Frame();
Button button = new Button();
frame.width = 400;
frame.height = 300;
frame.title = "title";
frame.visible = true;
button.width = 100;
button.height = 30;
button.title = "button";
button.top = 10;
button.left = 10;
button.visible = true;
frame.addButton(button);
frame.run();
frame.addButton(button).addActionListener(new ActionListener() {//Get JButton returned after calling function (I know it's crappy, but I could not find a way to do something similar) 9812934
public void actionPerformed(ActionEvent arg0) {
System.out.println("sadasdasd");
}
});
}
}
Frame.java
package lib;
import javax.swing.JButton;
import javax.swing.JFrame;
import lib.Button;
public class Frame {
public int width;
public int height;
public String title;
public boolean visible;
JFrame FRAME = new JFrame();
public void run(){
FRAME.setSize(width, height);
FRAME.setTitle(title);
FRAME.setLayout(null);
FRAME.setLocationRelativeTo(null);
FRAME.setVisible(visible);
FRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FRAME.setResizable(false);
}
public JButton addButton(Button button){
JButton BUTTON = new JButton();
BUTTON.setText(button.title);
BUTTON.setBounds(button.left, button.top, button.width, button.height);
BUTTON.setVisible(button.visible);
FRAME.add(BUTTON);
return BUTTON;//Here's where I return the JButton 9812934
}
}
Button.java
package lib;
import javax.swing.JButton;
public class Button{
public int left;
public int top;
public int width;
public int height;
public String title;
public boolean visible;
JButton button = new JButton();
public void button(){
button.setBounds(left, top, width, height);
button.setText(title);
button.setVisible(visible);
}
}
您应该将按钮添加到框架的 contentPane 而不是自己的框架。始终建议在 Panel 级别而不是 swing 中的框架级别工作
您的代码不起作用,因为您创建了 JButton
的两个实例并将它们叠加在一起,这正是 @Andrew 在他的评论中警告您的。当您单击该按钮时,您实际上是在单击没有附加动作侦听器实现的按钮。
这里是相关位:
//frame.addButton(button); // <-- first instance created and added
frame.run();
// ˇ second instance created and added
frame.addButton(button).addActionListener(new ActionListener() {//Get JButton returned after calling function (I know it's crappy, but I could not find a way to do something similar) 9812934
public void actionPerformed(ActionEvent arg0) {
System.out.println("sadasdasd");
}
});
只需注释第一次调用即可修复框架的客户端代码。
尝试简化 Swing 是您自己承担的一项苦差事。感谢你。传递 JButton 对象并没有错,只要确保传递正确的对象即可。
注意:您正在从一个非事件调度线程的线程调用 Swing 代码。如果您的新框架有任何希望正常工作,您将需要修复它(将所有内容包装在 SwingUtilities.invokeLater(Runnable) 中)。