Hallo Forum bin neu hier. Kurz was zu mir: Komme aus der Schweiz, bin 18, leidenschaftlicher Programmierer und Webdesigner (alles Selbstudium, als Hobby wohlbemerkt). Habe mir bereits Grundlagen sowie einige erweiternde Funktionalitäten (threads/(multiple) inheritance/interfaces/polymorphismus/grafics/swapping methods... etc.) sowie Grundlagen zu Java GUI (AWT + Swing, auch Applets) angeeignet. Ansonsten kenn ich mich mit html, css, php, javaScript, Ajax, "sql" und ein wenig xml aus; C/C++ und Pyton sind mir Begriffe, habe damit allerdings nicht sehr viel am Hut.
Momentan bin ich daran eine (xml basierende)Kundendatenbank aufzusetzen. Das hat soweit auch ganz nett gefunzt.
Nun wollte ich für gewisse Felder einen Cell-Renderer zuweisen um Zellen mit einer URL oder einer Emailadresse "auszuführen" sprich die externen Programme dafür (MS Outlook, Webbrowser). Kurz: Einige event listeners für externe Prozesse. Da man dies nicht mit simplem html-code in einem JLabel realisieren kann habe ich mal bissle gegoogelt und bin auch die Klasse Desktop gestossen - Traum mit Hacken. Es ist mir zwar gelungen die buttons zu rendern und die action events auszuführen, aber diese werden beinahe in einer Endlosschleife ausgeführt oder, was ich auch schon erreicht habe, dass der Browser zum Beispiel die Website öffnet (JFrame focus lost) und dann bei erneuter Interaktion mit dem Fenster (JFrame focus gained) sich dieser Prozess ständig wiederholt.
Zuerst wolle ich das alleine hinkriegen, habe aber inzwischen resigniert. Wäre extrem froh, wenn mir jemand von euch auf die Sprünge helfen könnte.
Danke schon mal im Voraus. Anbei noch die relevanten Code-Sniplets.
Momentan bin ich daran eine (xml basierende)Kundendatenbank aufzusetzen. Das hat soweit auch ganz nett gefunzt.
Nun wollte ich für gewisse Felder einen Cell-Renderer zuweisen um Zellen mit einer URL oder einer Emailadresse "auszuführen" sprich die externen Programme dafür (MS Outlook, Webbrowser). Kurz: Einige event listeners für externe Prozesse. Da man dies nicht mit simplem html-code in einem JLabel realisieren kann habe ich mal bissle gegoogelt und bin auch die Klasse Desktop gestossen - Traum mit Hacken. Es ist mir zwar gelungen die buttons zu rendern und die action events auszuführen, aber diese werden beinahe in einer Endlosschleife ausgeführt oder, was ich auch schon erreicht habe, dass der Browser zum Beispiel die Website öffnet (JFrame focus lost) und dann bei erneuter Interaktion mit dem Fenster (JFrame focus gained) sich dieser Prozess ständig wiederholt.
Zuerst wolle ich das alleine hinkriegen, habe aber inzwischen resigniert. Wäre extrem froh, wenn mir jemand von euch auf die Sprünge helfen könnte.
Danke schon mal im Voraus. Anbei noch die relevanten Code-Sniplets.
Java:
/**
* Constructor
*/
public MyActionListener(String command) {
this(command, null);
}
/**
* Constructor with argument
*/
public MyActionListener(String command, Object target) {
this(command, new Object[]{target});
}
/**
* Constructor with argument
*/
public MyActionListener(String command, Object[] target) {
this.command = command;
this.target = target;
}
Java:
// get desktop
Desktop desktop = null;
if(Desktop.isDesktopSupported())
desktop = Desktop.getDesktop();
// email
if(desktop.isSupported(Desktop.Action.MAIL)) {
try {
desktop.mail(new URI("mailto:"+(String)target[0]+"?subject=Test-Mail"));
} catch(Exception ex) {}
desktop = null;
}
} else if(command == "openURL") {
if(target == null) return;
// get desktop
Desktop desktop = null;
if(Desktop.isDesktopSupported())
desktop = Desktop.getDesktop();
// browse
if(desktop.isSupported(Desktop.Action.BROWSE)) {
try {
desktop.browse(new URI("http://www."+(String)target[0]));
} catch(Exception ex) {}
desktop = null;
}
}
Java:
// table cell editor
class MyCellEditor extends AbstractCellEditor implements TableCellEditor {
String currentValue;
JButton btn0;
public MyCellEditor() {
btn0 = new JButton("homepage");
btn0.setActionCommand("openURL");
btn0.setBorderPainted(true);
}
public Object getCellEditorValue() {
return currentValue;
}
// implement the one method defined by TableCellEditor.
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int col)
{
currentValue = value.toString();
btn0.addActionListener(new MyActionListener("openURL", currentValue));
return btn0;
}
}
Zuletzt bearbeitet: