Kalde metode i klasse den ikke kender?
Hej, jeg har et problem. Jeg er igang med at lave et GUI, jeg har to klasser: MainControl og GUI. GUI er en Frame, og den bliver lavet af MainControl.Mit problem er at jeg vil starte tråde fra mit GUI, ved hjælp af en knap. Trådene bliver lavet i MainControl. Derfor har jeg en metode i MainControl der kan dét. Men da GUI ikke kender MainControl objektet, så kan jeg jo ikke det.
Hvordan kan jeg få GUI objektet til at kende MainControl objektet? Jeg prøvede at sende referencen videre via constructoren, men jeg synes ikke jeg kunne få det til at virke.
Her er mine klasser:
----------------------------------------------------
package thread;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainControl {
ArrayObjects ao;
GUI frame;
ThreadA a;
ThreadB b;
ThreadC c;
public MainControl() {
frame = new GUI();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });
frame.setVisible(true);
}
public ArrayObjects getArrayObjects()
{
return ao;
}
public void startAll(){
a.start();
b.start();
c.start();
}
public void run(){
ao = new ArrayObjects();
frame.initialize(ao);
ao.setMailVan();
a = new ThreadA(ao);
b = new ThreadB(ao);
c = new ThreadC(ao);
a.start();
b.start();
c.start();
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
MainControl mc = new MainControl();
mc.run();
}
}
----------------------------------------------------
package thread;
import javax.swing.*;
import java.awt.*;
import oracle.jdeveloper.layout.*;
import oracle.dacf.layout.*;
import java.awt.event.*;
//import oracle.jdeveloper.layout.*;
public class GUI extends JFrame implements PropertyListener{
String[] data = new String[25];
MainControl mc;
String temp;
JPanel jPanel1 = new JPanel();
XYLayout xYLayout1 = new XYLayout();
JLabel jLabel1 = new JLabel();
JList jList2 = new JList(new DefaultListModel());
JLabel jLabel2 = new JLabel();
JList jList3 = new JList(new DefaultListModel());
JLabel jLabel3 = new JLabel();
JList jList4 = new JList(new DefaultListModel());
JLabel jLabel4 = new JLabel();
XYLayout xYLayout2 = new XYLayout();
JList jList1 = new JList(new DefaultListModel());
JButton jButton1 = new JButton();
public GUI() {
super();
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(xYLayout2);
this.setSize(new Dimension(545, 660));
jLabel1.setText("MailVan");
jLabel2.setText("Hand");
jLabel3.setText("Table");
jLabel4.setText("PostBag");
xYLayout2.setHeight(661);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
xYLayout2.setWidth(545);
jPanel1.setLayout(xYLayout1);
this.setTitle("Postoffice");
this.getContentPane().add(jPanel1);
this.getContentPane().add(jLabel1, new XYConstraints(10, 119, 59, -1));
this.getContentPane().add(jList2, new XYConstraints(127, 141, 32, 472));
this.getContentPane().add(jLabel2, new XYConstraints(124, 120, 41, -1));
this.getContentPane().add(jList3, new XYConstraints(282, 142, 30, 472));
this.getContentPane().add(jLabel3, new XYConstraints(276, 122, 41, -1));
this.getContentPane().add(jList4, new XYConstraints(481, 144, 31, 468));
this.getContentPane().add(jLabel4, new XYConstraints(475, 126, 58, -1));
this.getContentPane().add(jList1, new XYConstraints(15, 137, 29, 474));
this.getContentPane().add(jButton1, new XYConstraints(77, 31, -1, -1));
}
public void initialize(ArrayObjects ao)
{
// registrér som observer
ao.addPropertyListener(this);
}
public void onPropertyEvent(String name, int loc, int id)
{
System.out.println("onPropertyEvent triggered in " + name + "[" + loc + "] " + "Mail ID moved is: " + id);
temp = Integer.toString(id);
if(name == "MailVan")
((DefaultListModel)jList1.getModel()).addElement(temp);
if(name == "Hand")
((DefaultListModel)jList2.getModel()).addElement(temp);
if(name == "Table")
((DefaultListModel)jList3.getModel()).addElement(temp);
if(name == "PostBag")
((DefaultListModel)jList4.getModel()).addElement(temp);
}
public void onPropertyEventDel(String name, int loc, int id){
if(name == "MailVan")
((DefaultListModel)jList1.getModel()).removeElementAt(0);
if(name == "Hand")
((DefaultListModel)jList2.getModel()).removeElementAt(0);
if(name == "Table")
((DefaultListModel)jList3.getModel()).removeElementAt(0);
if(name == "Postbag")
((DefaultListModel)jList4.getModel()).removeElementAt(0);
}
void jButton1_actionPerformed(ActionEvent e) {
}
}
Jeg håber i kan hjælpe.
