JInternalFrame und paint(Graphics g)

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Code:
003 import java.awt.*;
004 import java.awt.event.*;
005 import javax.swing.*;
006 
007 class DesktopFrame
008 extends JFrame
009 {
010   private JDesktopPane desk;
011 
012   public DesktopFrame()
013   {
014     super("DesktopFrame");
015     this.desk = new JDesktopPane();
016     desk.setDesktopManager(new DefaultDesktopManager());
017     setContentPane(desk);
018     addWindowListener(new WindowClosingAdapter());
019   }
020 
021   public void addChild(JInternalFrame child, int x, int y)
022   {
023     child.setLocation(x, y);
024     child.setSize(200, 150);
025     child.setDefaultCloseOperation(
026       JInternalFrame.DISPOSE_ON_CLOSE
027     );
028     desk.add(child);
029     child.setVisible(true);
030   }
031 }
032 
033 class ChildFrame
034 extends JInternalFrame
035 {
036   public ChildFrame(String title)
037   {
038     super("Child " + title, true, true);
039     setIconifiable(true);
040     setMaximizable(true);
041     setBackground(Color.lightGray);
042   }
043 }
044 
045 public class Listing3607
046 {
047   public static void main(String[] args)
048   {
049     //Desktop erzeugen
050     DesktopFrame desktop = new DesktopFrame();
051     desktop.setLocation(100, 100);
052     desktop.setSize(400, 300);
053     desktop.setVisible(true);
054     //Zwei ChildFrames hinzufügen
055     desktop.addChild(new ChildFrame("1"), 10, 10);
056     desktop.addChild(new ChildFrame("2"), 20, 20);
057   }
058 }

Wie kann ich :

Code:
public void paint(Graphics g)
{
g.drawLine(100,100,100,300);
}

in dem ChildFrame anzeigen lassen. Ich suche eine Möglichkeit eine einfache Linie zu zeichnen.
 
Code:
033 class ChildFrame 
034 extends JInternalFrame 
035 { 
036   public ChildFrame(String title) 
037   { 
038     super("Child " + title, true, true); 
039     setIconifiable(true); 
040     setMaximizable(true); 
041     setBackground(Color.lightGray); 
042   } 
    public void paint(Graphics g) 
{ 
super.paint(g);
g.drawLine(100,100,100,300); 
}

043 }


Glaube ich zu mindest...
 
Code:
 033 class ChildFrame
034 extends JInternalFrame
035 {
036   public ChildFrame(String title)
037   {
038     super("Child " + title, true, true);
039     setIconifiable(true);
040     setMaximizable(true);
041     setBackground(Color.lightGray);
042   }
    public void paintComponent(Graphics g)
{
g.drawLine(100,100,100,300);
}

043 }

Ist die offiziellere Version, wenn ich mich nicht täusche.
 
naja aber dann kann er außer der Line die er dann gezeichnet hat,
nix zusätztlich hin ein packen...
Dann muss man sich also nicht wundern wenn Labels oder Buttons nicht angezeigt werden.
Sollte dieser Frame nur zum Linen zeichnen genutzt werden, ist Benis Version ausreichend... :wink:
 
@Mizus

Zuerst Quellcode lesen, dann schreiben.
Die paint-Methode einer JComponent (von der JInternalFrame abgeleitet ist), ruft zuerst paintComponent, dann paintBorder, danach paintChildren auf.

Womit die Children durchaus gezeichnet werden.


Allerdings, hab ich gerade gelesen, sollte man nicht paint oder paintComponent von JInternalFrame überschreiben, da die auf sehr schnelles zeichnen optimiert sind.

Also besser zum Zeichnen ein JPanel nehmen, und dieses dem JInternalFrame übergeben.

mfg Beni 😀
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben