Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo ich hab eine Checkbox die wenn sie angeklickt wird einen Text in die Zwischenablage kopieren soll
allerdings müsste die Checkbox in kleinen Zeitabständen immer wieder auf das Textfekd zugreifen und den Text neu holen, weil wenn ich die Checkbox aktiviere bevor in dem Textfeld was steht dann kopiert er ja den leeren Inhalt daher meine Frage wie ich einer Checkbox sagen kann das sie in einem bestimmten Zeitintervall immer wieder getText() aufrufen soll.... muss ich das per Thread und dann sleep() machen ?
Danke
hm also irgendwie kriege ich es doch nicht hin mein Programm hängt sich immer auf wenn ich die Checkbox aktiviere , mit dem DocumentListener weiß ich leider nicht umzugehen daher hatte ich es als Thread versucht aber da hängt sich das Programm wie gesagt auf... hier mal der Code:
Java:
public class Kopieren implements Runnable {
Thread t;
......
public void run()
{
while(true) {
Clipboard zwischenablage = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringselection = new StringSelection(copyField.getText());
zwischenablage.setContents(stringselection, null);
try {
t.sleep(10);
} catch (InterruptedException e) {}
}
}
.........
kopierenCheckBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange () == ItemEvent.SELECTED) {
run();
}
if (e.getStateChange () == ItemEvent.DESELECTED) {
t.interrupted();
}
}
});
}
EDIT:Wieso hängt er sich jetzt hier auf ich habe doch eine Abbruchbedingung indem ich die Checkbox ausschalte ... pls brauche eure Hilfe
hm das klappt irgendwie nicht -.- bekomme immer awt eventQueue 0
kann man das nicht mit nem Thread lösen und dann per ItemListener ich glaube das würde ich auch besser durchblicken =)
Zeig uns doch mal deinen Code wo du jetzt den Listener eingebaut hast ! Das mit dem Thread finde ich ist keine gute Idee !
Du könntest natürlich auch einfach in deinem itemStateChanged prüfen ob das Textfeld leer ist oder nicht und erst dann etwas in die Zwischenablage legen :bahnhof:
den code habe ich oben als edit eingefügt
die nullpointer exception bekomme ich glaube ich weil ich nichts in dem textfeld stehen hatte wenn ich was reinschreibe dann zeigt er es aber auch erst an wenn ich in das Textfeld drücke und er kopiert trotzdem nur einmal und nicht immer wenn sich das im Textfeld was ändert
Ja aber wenn ich erst die Checkbox aktivere und dann erst was ins Textfeld reinschreibe soll er das ja trotzdem kopieren und er soll halt nicht nur einmal kopieren sondern jedesmal wenn sich das was im Textfeld verändert
Hä?
Also so kommen wir hier nicht weiter. Erstelle ein simples kleines Beispielprogramm, das jeder hier ausführen kann und sich auf das Wichtigste beschränkt und vor allem: Erkläre noch einmal genau was du eig. machen willst? Wann soll nun etwas in die Zwischenablage kopiert werden? Jedes mal wenn sich der Text im Textfeld ändert UND die Checkbox aktiviert ist oder wie?
Also so etwas wie:
Java:
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
/**
* Snippet
*
*/
public class App {
final JCheckBox kopierenCheckBox = new JCheckBox("Zwischenablage");
final JTextField copyField = new JTextField(20);
public App() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
copyField.getDocument().addDocumentListener(new DocumentListener() {
public void removeUpdate(DocumentEvent e) {
if(kopierenCheckBox.isSelected() && !copyField.getText().isEmpty()){
copyText();
}
}
public void insertUpdate(DocumentEvent e) {
if(kopierenCheckBox.isSelected() && !copyField.getText().isEmpty()){
copyText();
}
}
public void changedUpdate(DocumentEvent e) {}
});
kopierenCheckBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED && !copyField.getText().isEmpty()) {
copyText();
}
}
});
panel.add(kopierenCheckBox);
panel.add(copyField);
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void copyText(){
Clipboard zwischenablage = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringselection = new StringSelection(copyField.getText());
zwischenablage.setContents(stringselection, null);
}
/**
* Hello Snippet
*
*/
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new App();
}
});
}
}
Kann leider den Thread im Moment nur kurz überfliegen und habe mich auch in das Listener-Problem nicht vertieft. Aber wenn du deinen Code veranlassen willst, "in kleinen Zeitabständen immer wieder" dasselbe zu tun, gäbe es doch eine relativ simple Lösung: