G
Guest
Gast
Hi Leute,
folgende Situation: Ich hab eine GUI-Anwendung geschrieben, welche einen ConnectButton besitzt, wenn dieser gedrückt wird, dann wird in einer Geräteklasse eine Connect Methode aufgerufen. Das ganze ist nach dem MVC Prinzip realisiert und funktioniert auch. Jetzt möchte ich aber dass die Connectmethode in eine Textarea Log-Infos schreiben kann. Ich möchte der Methode nicht einfach eine Referenz auf das Feldübergeben. Muss ich jetzt ein eignes Event+Listener erzeugen um den Controller die Infos in das Feld schrieben zu lassen? Wie würde sowas aussehen.
So sieht es bisher aus:
folgende Situation: Ich hab eine GUI-Anwendung geschrieben, welche einen ConnectButton besitzt, wenn dieser gedrückt wird, dann wird in einer Geräteklasse eine Connect Methode aufgerufen. Das ganze ist nach dem MVC Prinzip realisiert und funktioniert auch. Jetzt möchte ich aber dass die Connectmethode in eine Textarea Log-Infos schreiben kann. Ich möchte der Methode nicht einfach eine Referenz auf das Feldübergeben. Muss ich jetzt ein eignes Event+Listener erzeugen um den Controller die Infos in das Feld schrieben zu lassen? Wie würde sowas aussehen.
So sieht es bisher aus:
Code:
public class Bridge {
public static void main(String[] args) {
SerialComm serialComm = new SerialComm(); // Model
BridgeGUI bridgeGUI = new BridgeGUI(); // View
BridgeController bridgeController = new BridgeController(serialComm,bridgeGUI);
bridgeGUI.setVisible(true);
}
}
// =================== View
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class BridgeGUI extends JFrame{
private JTextArea m_LogField = new JTextArea("",15,30);
private JButton m_ConnectButton = new JButton("Connect");
BridgeGUI() {
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.add(m_LogField, BorderLayout.CENTER);
content.add(m_ConnectButton, BorderLayout.SOUTH);
this.setContentPane(content);
this.pack();
}
void addConnectListener(ActionListener cal) {
m_ConnectButton.addActionListener(cal);
}
}
// =================Model
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
public class SerialComm {
private Enumeration portList;
private CommPortIdentifier portIdentifier;
public InputStream in;
public OutputStream out;
public Boolean M500Found;
public Thread listenThread;
public SerialComm() {
}
void connect() throws Exception {
M500Found = false;
portList = CommPortIdentifier.getPortIdentifiers();
// log.append("Scanning Ports:\n");
while (portList.hasMoreElements() && !M500Found) {
try {
portIdentifier = (CommPortIdentifier) portList.nextElement();
if (portIdentifier.getPortType() == CommPortIdentifier.PORT_SERIAL) {
// log.append(portIdentifier.getName() + "...\n");
if (portIdentifier.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
// log.append("Error: Port is currently in use\n");
} else {
CommPort commPort = portIdentifier.open(this.getClass()
.getName(), 2000);
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(115200,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
in = serialPort.getInputStream();
out = serialPort.getOutputStream();
listenThread = new Thread(new SerialReader(in));
listenThread.start();
out.write("M500, bist du es?".getBytes());
Thread.sleep(2000);
listenThread.stop();
commPort.close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/** */
public class SerialReader implements Runnable {
InputStream in;
public SerialReader(InputStream in) {
this.in = in;
}
public void run() {
byte[] buffer = new byte[1024];
int len = -1;
try {
len = this.in.read(buffer);
if ((new String(buffer, 0, len)).equals("M500, bist du es?")) {
M500Found = true;
// log.append("M500 found.\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// =================== Controller
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BridgeController {
private final SerialComm m_serialComm;
private BridgeGUI m_bridgeGUI;
BridgeController(SerialComm serialComm, BridgeGUI bridgeGUI) {
m_serialComm = serialComm;
m_bridgeGUI = bridgeGUI;
bridgeGUI.addConnectListener(new ConnectListener());
}
class ConnectListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
m_serialComm.connect();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}