Swing InternalFrame wird nicht angezeigt!!

Tucan

Bekanntes Mitglied
Hallo, ich bin schon ein fortgeschrittener Java-Programmierer und habe ein Problem!

Ich möchte eine Anwendung mit Bedienpult schreiben und verwende dafür JInternalFrames und JDesktopPane. Jetzt habe ich das große Problem, dass mein internes Frame nicht
angezeigt wird! was mache ich nur falsch??!!

Hier der Code:
[Java]JDesktopPane desktop = new JDesktopPane();
add(desktop);

JInternalFrame frame1 = new JInternalFrame("Project Manager", false, false, false, false);
frame1.setSize(300,100);
frame1.setVisible(true);
desktop.add(frame1);
[/Java]

Vielen Dank,
Tucan
 
Ja, aber diese Möglichkeit möchte ich nicht nutzen! Mein Code ist auch völlig in Ordnung, ich sende mal einen Beispielcode, der komischerweise klappt:

[Java]import javax.swing.*;
import static java.lang.Math.random;

public class JInternalFrameDemo
{
static void addInternalToDesktop( JDesktopPane desktop )
{
JInternalFrame iframe;
iframe = new JInternalFrame( "Ein internes Fenster", // title
true, // resizable
true, // closeable
true, // maximizable
true ); // iconifiable

iframe.setBounds( (int)(random() * 100), (int)(random() * 100),
100 + (int)(random() * 400), 100 + (int)(random() * 300) );
iframe.add( new JScrollPane(new JTextArea()) );
iframe.setVisible( true );

desktop.add( iframe );
}

public static void main( String[] args )
{
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
JDesktopPane desktop = new JDesktopPane();
f.add( desktop );
f.setSize( 500, 400 );
addInternalToDesktop( desktop );
addInternalToDesktop( desktop );
addInternalToDesktop( desktop );
f.setVisible( true );
}
}
[/Java]

Dieser Code erfüllt aber nicht meine Zwecke, und wenn ich ihn umschreibe, klappt er nicht mehr!!! 🙁 🙁
 
Wo ist denn der funktionierende Code anders als der der nicht funktioniert. Die sehen für mich nahezu identisch aus... Anders gesagt: Was genau passt denn an dem funktionierendem Beispiel nicht in dein Konzept?
 
Ich weiß es auch nicht 🙁🙁🙁

Fakt ist der Beispielcode wird angezeigt, meiner nicht!!!!???

🙁🙁🙁🙁🙁🙁
 
Nein, ich möchte, dass das Frame nicht minimierbar ist. Sobald ich das aber umschreibe, klappt es nicht mehr.

:wuerg: :lol:
 
deine Klasse erbt von JFrame nehme ich an? setzt du die denn auch visible?
in deinem Beispiel das nicht funktioniert steht nur ein "frame1.setVisible(true);" das reicht aber nicht es müsste noch irgendwo ein "setVisible(true);" für das Frame kommen.
 
hallo

Ich mach sowas immer mit einem JLayeredPane.

Java:
JLayeredPane lp = getLayeredPane();
JInternalFrame i = new JInternalFrame("TestFrame", true, true, true);
i.setSize(100,100);
i.setVisible(true);
lp.add(i, 100);

bei mir funkt das immer!

sg thomas
 
ERROR!!!
Es wird immer noch nichts angezeigt, hier der komplette Code:

Java:
 mill(String titel) {
  super(titel);
  
  setLayout(new FlowLayout());
  
  //die Menüleiste
  JMenuBar menubar = new JMenuBar();
  
  //die Menüs
  JMenu optionsmenu = new JMenu("Options");
  JMenuItem workspace1 = new JMenuItem("Select first Projectspace");
  JMenuItem workspace2 = new JMenuItem("Select secondary Projectspace");
  JMenuItem packages = new JMenuItem("Package Manager");
  optionsmenu.add(workspace1);
  optionsmenu.add(workspace2);
  optionsmenu.add(packages);
  
  JMenu helpmenu = new JMenu("Help");
  JMenuItem information = new JMenuItem("information.txt", txticon);
  helpmenu.add(information);
  
  menubar.add(optionsmenu);
  menubar.add(helpmenu);
  
  //Aufbau des Startfensters
  startfenster splashscreen = new startfenster();
  add(splashscreen);  
  
  //die fensterinhalte
  treepanel tree1 = new treepanel();
  
  //das DesktopPane wird dem splashcreen zur dynamischen Anzeige hinzugefügt
  JLayeredPane desktop = new JLayeredPane();
  add(desktop);
  
  JInternalFrame frame1 = new JInternalFrame("Project Manager", false, false, false, false);
  frame1.setSize(300,100);
  frame1.setVisible(true);
  desktop.add(frame1);
  
  
  //adden
  splashscreen.add(desktop);
  
  setJMenuBar(menubar);
  
  setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  }
  
  public static void main(String[] args) {
  /*byte splash = 1;
  while(splash <= 100) {
  
  try {
  Thread.sleep(10);
  
  } catch(Exception ts) {
   return;
   }
  
  splash++;
  }
  */
  
  mill fenster = new mill("Millenium");
  fenster.pack();
  fenster.setSize(1300,830);
  fenster.setLocation(55,75);
  fenster.setVisible(true);
  /*try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  SwingUtilities.updateComponentTreeUI(fenster);
  }catch(Exception uie) {
  //dann halt nicht
  }*/
  
  }
 
Java:
 JLayeredPane desktop = getLayeredPane()
Und dein add(desktop) lass auch mal weg, den mit getLayeredPane() holst du dir das ja schon.
Und wenn du dein jInternalframe addest dann mach das folgendermaßen:
Java:
 desktop.add(iFrame, 100);
100 ist eine Integerkonstante für Modal glaube ich.
Muss jetzt trainieren, kann dir das später noch erklären!
Gruß Thomas
 
Zuletzt bearbeitet:
[ot]Tucan ich habs dir heute schon 1x gesagt, Smiles sind keine Rudeltiere. Eines reicht vollkommen!
In der Plauderecke darfst du dich gerne austoben, aber hier halte dich bitte zurück![/ot]
 
Vielen Dank, jetzt klappts! :-D Mann war ich Dämlich!! :lol: 😳

Smileys schreibt man so: Smiley :-D

Wie schließt man ein Thema??? 😕😛feif:
 
Zuletzt bearbeitet von einem Moderator:
[ot]
Da hast natürlich recht Smiley und nicht Smile 😉

Und es gibt auch die Möglichkeit seinen Beitrag zu editieren, bitte nutze diese um Doppelposts zu verhindern. Danke 🙂
[/ot]

Derzeit gibt es leider noch keine Möglichkeit ein Thema als erledigt zu markieren.
Außerdem werden Threads sowieso offen gelassen.
 
Zuletzt bearbeitet:
Hallo,
Hoffe es hat funktioniert?!

Zur Erklärung:
mit dem Aufruf
Java:
 JLayeredPane desktop = getLayeredPane()
erzeugst du eine Schicht über deinem JFrame und auf dieser Schicht kannst du jetzt ein JInternalFrame legen.
Java:
JInternalFrame iFrame = new JInternalFrame(.......) // Konstruktor je nach Bedarf anpassen
Es gibt ja verschieden Schichten (Layer) Popup-Layer, Palette-Layer, Modal-Layer etc, das Ganze kannst du in der API nachlesen.
zB.
Java:
desktop.add(iFrame,200) //für Modal_Layer der die Anwendung blockiert solange das Fenster offen ist
Ich hoffe ich hab das so einigermaßen verständlich erklärt.
Ich hab das mit dem Handy geschrieben bitte entschuldige Satz Fehler!
Falls du noch Fragen hast, einfach melden!
Gruß Thomas
 

Neue Themen


Zurück
Oben