gpt4 book ai didi

java - 如何通过不同的类访问对象方法?

转载 作者:行者123 更新时间:2023-12-01 07:51:48 24 4
gpt4 key购买 nike

所以基本上我有一个主(DrawDriver),我在顶部创建了 2 个对象。

 public class DrawDriver {

public static void main(String[] args) {

final GraphicPanel pannel1 = new GraphicPanel();
final Frame2UserInput pannel2 = new Frame2UserInput();

TitledBorder border = new TitledBorder("Input");
border.setTitleColor(Color.BLACK);
pannel2.setBorder(border);

JFrame frame = new JFrame("DrawGoGo!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(500, 500));
frame.setLayout(new GridLayout(2, 0));
frame.pack();
frame.setVisible(true);
frame.setResizable(false);

// Creating the MENU BAR

JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);
JMenu file = new JMenu("File");
menubar.add(file);
JMenuItem New = new
JMenuItem("New"); // Creates the jmenu item
file.add(New); // adds
JMenuItem Load = new JMenuItem("Load");
file.add(Load);
JMenuItem Save = new JMenuItem("Save");
file.add(Save);
JMenuItem Exit = new JMenuItem("Exit");
file.add(Exit);
JMenu help = new JMenu("Help");
menubar.add(help);

JMenuItem about = new JMenuItem("About");
help.add(about);

frame.getContentPane().add(pannel1);
frame.getContentPane().add(pannel2);



}

在 Frame2UserInput 中,我想通过 DrawDriver(主)类访问 GraphicPanel 实例。这将是一个 Canvas ,我可以在其中输入命令并单击按钮,然后 Canvas 将相应地绘制。您可以看到我已经尝试在 ActionListener 中访问它,但不能,因为它创建了该类的新实例并且不会更改我运行的程序(gui)中的任何内容。

那么我如何通过不同的类访问我在主程序中为 GraphicPanel 创建的对象?任何帮助将不胜感激,谢谢!

    public class Frame2UserInput extends JPanel {

private static JTextArea input;
private static JButton draw;

Frame2UserInput() {

input = new JTextArea(2,35);
add(input);
draw = new JButton("Draw!");
draw.addActionListener(new DrawListener());
add(draw);
}

private static class DrawListener implements ActionListener {

private String userInput;
GraphicPanel pannel1 = new GraphicPanel();

public void actionPerformed(ActionEvent event) {


if (event.getSource()==draw) {

userInput = input.getText();
System.out.println(userInput);

if (userInput.equalsIgnoreCase("penup")) {

}

if (userInput.equalsIgnoreCase("pendown")) {

}

if (userInput.equalsIgnoreCase("turnleft")) {

}

if (userInput.equalsIgnoreCase("turnright")) {

}
if (userInput.equalsIgnoreCase("black")) {

}

if (userInput.equalsIgnoreCase("green")) {

}

if (userInput.equalsIgnoreCase("red")) {
pannel1.drawLine(Color.RED,0,0,100,100);
}

if (userInput.equalsIgnoreCase("reset")) {
pannel1.clear();
}

}
} } }

最佳答案

将其作为参数。

final GraphicPanel pannel1 = new GraphicPanel();        
final Frame2UserInput pannel2 = new Frame2UserInput(pannel1 );

新的Frame2UserInput构造函数:

Frame2UserInput(GraphicPanel pannel1) {
.
.
draw.addActionListener(new DrawListener(pannel1));
}

以及新的 DrawListener 构造函数

DrawListener(GraphicPanel pannel1) {
.
.
//Don't need this just use pannel1
//GraphicPanel pannel1 = new GraphicPanel();
}

关于java - 如何通过不同的类访问对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com