btcMoses Geschrieben 4. Februar 2007 Teilen Geschrieben 4. Februar 2007 Tach zusammen, ich spiele Grad mit AWT/Swing. ich habe in nem JFrame eine methode geschrieben die von extern daten annimmt und daraus ein container erstellt und ihn dem Frame hinzufügt. Mein problem ist, dass ich die Änderung nicht sehe, es sollte ja ein neuer Container(panel mit nem button) auf dem Frame entstehen. Wie sage ich dem Frame, dass es nen neuen Container bekommen hat? Ich habe schon einiger Listener angesehn aber nichts gefunden.. Wer weis wie das funktionert? Gruß moses Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 4. Februar 2007 Teilen Geschrieben 4. Februar 2007 Also ohne quelltext würde ich jetzt mal sagen, dir fehlt vielleicht noch ein setVisible(true); danach wird das fenster neu gezeichnet, womit dann die neuen schaltflächen auch zu sehen sein müssten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
btcMoses Geschrieben 4. Februar 2007 Autor Teilen Geschrieben 4. Februar 2007 hm ne das hab ich drin. Dieser Code ruft die geschriebene Methode in der Frame-Klasse auf: GUI fenster = new GUI(); fenster.setVisible(true); // wenn ich das nach der while Schleife setze gehts, aber das Fenster soll schon existieren und sichtbar sein. ResultSet rs = stmt.executeQuery("SELECT * from pictures;"); while (rs.next()){ Blob data = rs.getBlob( "pic" ); fenster.addPicturePanel(data.getBytes(1, (int) data.length()),rs.getString("name")); } Hier die Methode public void addPicturePanel(byte[] picture, String name){ Icon image = new ImageIcon(picture); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setBorder(BorderFactory.createTitledBorder(null, name, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51))); JLabel label = new JLabel(image); JButton button = new JButton(); button.setText("jetzt kaufen"); panel.add(label,BorderLayout.NORTH); panel.add(button,BorderLayout.SOUTH); this.add(panel); } Es fehlt das Stück Code, das den Frame dazu animiert sein neues Panel auch zu zeichnen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 5. Februar 2007 Teilen Geschrieben 5. Februar 2007 Dann probiere doch bitte einmal folgendes GUI fenster = new GUI(); fenster.setVisible(true); // wenn ich das nach der while Schleife setze gehts, aber das Fenster soll schon existieren und sichtbar sein. ResultSet rs = stmt.executeQuery("SELECT * from pictures;"); while (rs.next()){ Blob data = rs.getBlob( "pic" ); fenster.addPicturePanel(data.getBytes(1, (int) data.length()),rs.getString("name")); } [B]fenster.pack();[/B] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
btcMoses Geschrieben 5. Februar 2007 Autor Teilen Geschrieben 5. Februar 2007 hm cool es funktioniert... aber es zerhaut das layout des fensters. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cobinja Geschrieben 5. Februar 2007 Teilen Geschrieben 5. Februar 2007 Probier mal, nach dem Hinzufügen folgendes: GUI fenster = new GUI(); fenster.setVisible(true); // wenn ich das nach der while Schleife setze gehts, aber das Fenster soll schon existieren und sichtbar sein. ResultSet rs = stmt.executeQuery("SELECT * from pictures;"); while (rs.next()){ Blob data = rs.getBlob( "pic" ); fenster.addPicturePanel(data.getBytes(1, (int) data.length()),rs.getString("name")); } [B]fenster.invalidate();[/B] Das ist eine von der Klasse Container geerbte Methode, von der veranlasst wird, das Layout im JFrame neu aufzusetzen, mit allen Komponenten, die jetzt enthalten sind Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
btcMoses Geschrieben 5. Februar 2007 Autor Teilen Geschrieben 5. Februar 2007 Hi, leider funktioniert dies garnicht. fenster.repaint(); wäre auch ne möglichkeit.. leider geht das aber auch nicht. Das war auch die Antwort meines Informatiklehrers, aber geht ja nich.. er faselste noch was von paint() überschreiben und das das zu kompliziert ist un er das direkt am Quellcode zeigen muss. Aber das kann ja nich so aufregend sein. Is denn die Vorgehensweise überhaupt auch so ok? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 5. Februar 2007 Teilen Geschrieben 5. Februar 2007 Hi, leider funktioniert dies garnicht. fenster.repaint(); wäre auch ne möglichkeit.. leider geht das aber auch nicht. Hast du schon versucht die repaint Methode direkt auf dem Panel auszuführen ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
btcMoses Geschrieben 5. Februar 2007 Autor Teilen Geschrieben 5. Februar 2007 auch das bringt nix ich habe jetzt nochmal was anderes probiert: eine neue Klasse.. import java.awt.*; import javax.swing.*; import javax.swing.border.TitledBorder; public class PicturePanel extends JComponent{ JPanel Panel = new JPanel(); public PicturePanel(GUI mainFrame, byte[] picture, String name) { Panel.setLayout(new BorderLayout()); Panel.setBorder(BorderFactory.createTitledBorder(null, name, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51))); Icon image = new ImageIcon(picture); JLabel label = new JLabel(image); Panel.add(label,BorderLayout.CENTER); mainFrame.add(Panel).setVisible(true); setPreferredSize(Panel.getSize()); } } aufgerufen durch: fenster.getContentPane().add(new PicturePanel(fenster,data.getBytes(1, (int) data.length()),rs.getString("name"))); ...immernoch das selbe Problem. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Lord_Aratorn Geschrieben 1. August 2007 Teilen Geschrieben 1. August 2007 Hey, ich bin über Google auf dieses Thema gestoßen und habe gerade genau das selbe Problem, und finde keine Lösung. mal Vorab, ich erhalte von einem BildanalyseThread ein PlanarImageArray, in dem 3 Bilder enthalten sind. Das erste wird direkt von einer Webcam in das Array geschrieben. Dann habe ich dieses Bild nochmals in ein Graustufenbild umgewandelt und anschließend noch binarisiert, und setze diese dann zusätzlich in das Array. In dem BildanalyseThread werden durchweg Bilder aus der Camera genommen analysiert und in das Array geschrieben, also werden die Bilder in dem Array immer aktualisiert. Nun zu meinem Problem. Ich bekomme in meinem JFrame nur das erste Bild und die bearbeiteten Bilder des ersten Frames angezeigt, weitere werden nicht angezeigt. Vielleicht wisst ihr ja um Rat :-)import java.awt.GridLayout; import java.awt.Image; import java.util.concurrent.Semaphore; import javax.media.jai.PlanarImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import com.sun.media.jai.widget.DisplayJAI; public class Gui extends JFrame implements Runnable { private static final long serialVersionUID = 158632595136627636L; private ImageIcon icon = new ImageIcon("./logo.jpg"); private Image icon_image = icon.getImage(); private PlanarImage[] imageList = new PlanarImage[3]; public static Semaphore lock = new Semaphore(0); public void initFrame() { this.setName("WifiBot: analysis"); this.setDefaultCloseOperation(3); this.setResizable(false); this.setAlwaysOnTop(true); this.setLocation(20, 20); this.setVisible(true); this.setLayout(new GridLayout(3, 1)); try { Gui.lock.acquire(); this.getContentPane().add(new DisplayJAI(imageList[0])); this.getContentPane().add(new DisplayJAI(imageList[1])); this.getContentPane().add(new DisplayJAI(imageList[2])); this.setIconImage(icon_image); } catch (InterruptedException e) { e.printStackTrace(); } this.pack(); } public void run() { initFrame(); while (true) { this.invalidate(); //nur testweise this.repaint(); this.setVisible(true); //nur testweise } } public synchronized void setImages(PlanarImage[] imagelist) { this.imageList = imagelist; } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 1. August 2007 Teilen Geschrieben 1. August 2007 GUI fenster = new GUI(); fenster.setVisible(true); // wenn ich das nach der while Schleife setze gehts, aber das Fenster soll schon existieren und sichtbar sein. ResultSet rs = stmt.executeQuery("SELECT * from pictures;"); while (rs.next()){ Blob data = rs.getBlob( "pic" ); fenster.addPicturePanel(data.getBytes(1, (int) data.length()),rs.getString("name")); } fenster.setVisible(false); fenster.setVisible(true); und das ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Lord_Aratorn Geschrieben 1. August 2007 Teilen Geschrieben 1. August 2007 Nope geht nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Mit fenster.pack(); geht das schon aber pass auf so wie du das Programmiert hast wird das neue Panel einfach ANGEFÜGT, deshalb auch die Verschiebungen. Lösche vorher alle elemente auf dem Fenster (glaub das geht mit removeAll(Fenster)) dann funktionierts auch mit der Nachbarin. Noch ne Info: Wenn du bei Fester eine größe mitgiebst musst du die nach Pack auch nochmal einstellen Fenster.Size(x,y) Weil pack() zumindest unter AWT die Optimale größe für das Fenster errechnet und ansetzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2007 Teilen Geschrieben 2. August 2007 Ist das nicht, wenn Die Bilder in "Echtzeit" rein kommen zu langsam? Kannst Du nicht einfach 3 leere Bilder im Layout anlegen, und nur die Inhalte immer wieder updaten, ohne die gesamten Komponenten zu entfernen und neu zu adden? Ich meine mich erinnern zu können, dass man das in einer Imagekomponente machen kann. Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.