ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
428
428
EMPFEHLEN
-
03.01.07 17:10 #1
- Registriert seit
- Jan 2007
- Beiträge
- 2
Hallo ich bin derzeit dabei mich in SWING einzuarbeiten und habe folgendes versucht zu programmieren.
Es soll ein Fenster dargestellt werden das einen Menüeintrag hat mit dem man ein beliebiges Bild laden kann. Dieses Bild wird dann anschließend in einem Panel dargestellt. Das Fenster ist so programmiert das es sich je nach Größe des Bildes anpasst. Das ganze funktioniert wenn ich das Fenster von Anfang an mit setSize so groß mache das es größer ist als das größte Bild das ich jemals darstellen will. Ist das Fenster aber zuerst sehr klein dann funktioniert das beim ersten Bild auch noch. Wenn ich jetzt aber ein größeres Bild öffne wird nur ein Ausschnitt der genauso hoch ist wie das alte Bild dargestellt.
Die einzige Möglichkeit das es dann doch noch ganz dargestellt wird ist das Fenster mit der Maus minimal zu vergrößern.
So nun meine Fragen:
- Wieso hat mein Repaint des Panels und sogar des Fensters keine Wirkung aber das
minimale verändern der Fenstergröße mit der Maus (siehe die 3 Zeilen kurz vor der Main Funktion). So wie ich das verstanden habe zeichnet doch die repaint()-Funktion die Komponente neu. Und wenn ich das Fenster neu Zeichne müssten doch auch alle Unterkomponenten neu gezeichnet werden (auch das Panel).
- Wenn ich die prefered Size des Panels z.B. auf 100 x 100 setze müsste das Panel ja sehr klein sein. Wieso wird mit dem öffnen eines Bilder von z.B. 800 x 600 das Bild trozdem ganz angezeigt. Wird das Panel dann automatisch angepasst oder wie funktioniert das und wozu ist dann prefered size da?
- Wozu ist super.paintComponent(g); in der repaint Methode des Panels gut.
- Kennt jemand Informationen dazu wie in Windows das Windowing System funktioniert also Events, Fenstermanager, Zeichnen der Fenster. Damit mein ich jetzt nicht die Api-Schnittstellen sondern wie Windows das technisch umsetzt also wo werden die verschiedenen Fensterdaten gespeichert und woher weis Windows welches Event an welches Fenster geht etc. Ich suche danach schon ca. 4 Wochen, habe mir das Windows Internals Buch gekauft aber da ist auch nix drinn. Kann man das überhaupt rausbekommen oder ist das Betriebsgeheimnis von Microsoft und steht nirgendwo?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BildBetrachter extends JFrame { String dateiName; Image bild; int bildx=0,bildy=0; AnzeigeFlaeche anzeigeflaeche = new AnzeigeFlaeche(); static BildBetrachter fenster; //CBildLeinwand leinwand; class AnzeigeFlaeche extends JPanel { public void paintComponent(Graphics g) { //super.paintComponent(g); g.drawImage( bild, 0, 0, this ); } /*public Dimension getMinimumSize() { return new Dimension(111,111); } public Dimension getPreferedSize() { System.out.println(fenster.getSize().height); System.out.println(fenster.getSize().width); return getMinimumSize(); }*/ } class MeinWindowLauscher extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } class MeinActionLauscher implements ActionListener { public void actionPerformed(ActionEvent e) { String Label; Label = e.getActionCommand(); if (Label.equals("Programm beenden")) { System.exit(0); } else if (Label.equals("Bild laden")) { System.out.println("Bild laden"); bildLaden(); } } } BildBetrachter(String titel) { super(titel); //getContentPane().setLayout(new FlowLayout()); addButton("Bild laden",new MeinActionLauscher()); addButton("Programm beenden",new MeinActionLauscher()); addmenue(); add(anzeigeflaeche); addWindowListener(new MeinWindowLauscher()); } private void addButton(String titel,ActionListener listener) { JButton button; button=new JButton(titel); button.addActionListener(listener); this.getContentPane().add(button); } private void addmenue() { // Menüleiste JMenuBar menueleiste = new JMenuBar(); setJMenuBar(menueleiste); //Untermenüeinträge JMenuItem item1= new JMenuItem("Bild laden"); JMenuItem item2= new JMenuItem("Programm beenden"); item1.addActionListener(new MeinActionLauscher()); item2.addActionListener(new MeinActionLauscher()); //Menüeintrag JMenu menu1= new JMenu("Datei"); //Untermenüeinträge unter Menüeintrag einhängen menu1.add(item1); menu1.add(item2); //Menüeintrag in Menüleiste einhängen menueleiste.add(menu1); } public void bildLaden() { Toolkit kit=Toolkit.getDefaultToolkit(); MediaTracker ladeKontrolle= new MediaTracker(this); String dateiname; FileDialog d = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD); d.setVisible(true); dateiname = d.getDirectory(); dateiname += d.getFile(); if(dateiname == null) { return; } bild = kit.getImage(dateiname); ladeKontrolle.addImage(bild,0); try { ladeKontrolle.waitForID(0); } catch(InterruptedException e) { dateiname=null; bild=null; return; } fenster.setSize(bild.getWidth(anzeigeflaeche),bild.getHeight(anzeigeflaeche)+55); anzeigeflaeche.repaint(); fenster.repaint(); } public static void main(String[] args) { fenster = new BildBetrachter("Test"); fenster.pack(); fenster.setSize(100,100); fenster.setVisible(true); } }
-
Mit dem Code den du hier gepostet hast funktioniert doch alles. Zumindest bei mir (Java 1.5). Größere und kleinere Bilder werden mit ihrer korrekten Größe dargestellt.
-
04.01.07 11:36 #3
- Registriert seit
- Jan 2007
- Beiträge
- 2
Hy, dann hast du wahrscheinlich das Fenster am Anfang etwas größer gezogen oder? Wenn ich das Fenster am Anfang nicht mindestens so groß mache wie die Grafik die angezeigt werden soll, vergrößert er zwar das JFrame aber das Bild wird trotzdem nur teilweise innerhalb eines bestimmten Ausschnitts welcher die Größe des Ursprungsfensters hat sichtbar.
Ähnliche Themen
-
Viele kleine Objekte auf der Oberfläche eines großen Objekts
Von bmxsteffen im Forum Autodesk Maya (ehemals Alias)Antworten: 0Letzter Beitrag: 27.03.08, 10:50 -
Anpassung der Farben von verschieden Bildern
Von barten im Forum PhotoshopAntworten: 5Letzter Beitrag: 12.01.06, 09:48 -
Wie reinigt ihr bei großen Bildern Haut?
Von Ultraflip im Forum PhotoshopAntworten: 6Letzter Beitrag: 23.09.05, 11:49 -
Darstellung von großen Tabellen in Client/Server o.a. 3 Tier-Archetektur
Von takidoso im Forum JavaAntworten: 4Letzter Beitrag: 28.12.04, 13:32 -
Habe viele viele Fragen !
Von ThePretender im Forum Videoschnitt, Videotechnik & -produktionAntworten: 8Letzter Beitrag: 06.05.02, 22:58





Zitieren

Login





