Так что в основном у меня есть основной (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 Я хочу получить доступ к экземпляру GraphicPanel через (основной) класса DrawDriver. Это будет холст, где я могу вводить команды в &, нажав кнопку &, тогда холст будет рисовать соответственно. Вы можете видеть, что я пытался получить к нему доступ уже в своем 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();
}
}
} } }
1. Swing не является потокобезопасным, весь этот код должен быть выполнен на EDT. 2. Обычно вы указываете ссылку класса, к которому хотите вызвать методы, попробуйте добавить параметр класса в ctor «Frame2UserInput». – markspace
Этот тип материала - это OOP 101, который должен быть отсортирован задолго до того, как вы начнете использовать GUI. –
@WreckTangle Вы можете использовать шаблон Observer. Например: [обновление изменений в другом классе] (http://stackoverflow.com/questions/35876982/updating-change-to-another-class/35877451#35877451) – user3437460