LayoutManager Wieso verschwinden Elemente?

  • Themenstarter Themenstarter keinereg
  • Beginndatum Beginndatum
K

keinereg

Gast
Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.text.FlowView.FlowStrategy;
public class CodecGUI extends JFrame{
  Würfel würfel1 = new Würfel();
  Würfel würfel2 = new Würfel();
  
  public CodecGUI(){
        //Komponenten aufbauen
       JTextArea klartext = new JTextArea();
       //JTextArea Klartext einstellen
       JTextArea geheimtext = new JTextArea();
       //JTextArea Geheimtext einstellen
       
       
       JTextField codewort1 = new JTextField();
       JTextField codewort2 = new JTextField();
       JButton encode = new JButton();
       encode.setText("Verschlüsseln");
       JButton decode = new JButton();
       decode.setText("Entschlüsseln");
       JLabel klartextlabel = new JLabel("Klartext eingeben:");
       JLabel geheimtextlabel = new JLabel("Geheimtext eingeben:"); 
       JLabel codewort1label = new JLabel ("Erstes Codewort eingeben");
       JLabel codewort2label = new JLabel ("Zweites Codewort eingeben");
            
       //Panel erstellen
       JPanel c = new JPanel();
       c.setLayout(new BorderLayout());
       
       //Setzen der Werte fürs JFrame von CodecGUI
       this.add(c);
       this.setTitle("Doppelwürfelprogramm");
       this.setSize(600,300);
       this.setVisible(true);
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
       //Unterpanel
       JPanel wPanel = new JPanel(new FlowLayout());
       JPanel wPanel2 = new JPanel(new FlowLayout());
       JPanel wPanel3 = new JPanel (new FlowLayout());
       JPanel cPanel = new JPanel(new FlowLayout());
       JPanel ePanel = new JPanel(new FlowLayout());
       JPanel cPanel2 = new JPanel(new FlowLayout());
       JPanel cPanel3 = new JPanel(new FlowLayout());
       
       
       //Panels hinzufügen
       c.add(wPanel,BorderLayout.BEFORE_LINE_BEGINS);
       wPanel.add(wPanel2);
       wPanel.add(wPanel3);
       c.add(cPanel,BorderLayout.CENTER);
       cPanel.add(cPanel2);
       cPanel.add(cPanel3);
       c.add(ePanel,BorderLayout.AFTER_LAST_LINE);
        
       //Hinzufügen der Komponenten       
       wPanel2.add(klartextlabel);
       wPanel2.add(klartext);
       wPanel3.add(geheimtextlabel);
       wPanel3.add(geheimtext); 
       cPanel2.add(codewort1label);
       cPanel2.add(codewort1);
       cPanel3.add(codewort2label);       
       cPanel3.add(codewort2);
       ePanel.add(encode);
       ePanel.add(decode);
       }

}
Ich frage mich gerade warum manche Felder einfach verschwinden und wie ich das lösen kann
 
Du musst erst alle Komponenten zu deinen Panels hinzufügen, dann erst die Panels ins BorderLayout und auch erst ganz zum Schluss setVisible(true) setzen.
 
Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.text.FlowView.FlowStrategy;
public class CodecGUI extends JFrame{
  Würfel würfel1 = new Würfel();
  Würfel würfel2 = new Würfel();
  
  public CodecGUI(){
	initComponents();  
  }
  
  public void initComponents(){
      //Komponenten aufbauen
     JTextArea klartext = new JTextArea();
     klartext.setText("Bitte den Klartext eingeben");
     klartext.setColumns(20);
     klartext.setRows(10);
     //JTextArea Klartext einstellen
     JTextArea geheimtext = new JTextArea();
     geheimtext.setText("Bitte den Geheimtext eingeben");
     geheimtext.setColumns(20);
     geheimtext.setRows(10);
     //JTextArea Geheimtext einstellen
     
     
     JTextField codewort1 = new JTextField();
     JTextField codewort2 = new JTextField();
     JButton encode = new JButton();
     encode.setText("Verschlüsseln");
     JButton decode = new JButton();
     decode.setText("Entschlüsseln");
     JLabel klartextlabel = new JLabel("Klartext eingeben:");
     JLabel geheimtextlabel = new JLabel("Geheimtext eingeben:"); 
     JLabel codewort1label = new JLabel ("Erstes Codewort eingeben");
     JLabel codewort2label = new JLabel ("Zweites Codewort eingeben");
          
     //Panel erstellen
     JPanel c = new JPanel();
     c.setLayout(new BorderLayout());
     
     //Setzen der Werte fürs JFrame von CodecGUI
     this.add(c);
     this.setTitle("Doppelwürfelprogramm");
     this.setSize(600,300);
     this.setVisible(true);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     //Unterpanel
     JPanel wPanel = new JPanel(new FlowLayout());
     JPanel wPanel2 = new JPanel(new BorderLayout());
     JPanel wPanel3 = new JPanel (new BorderLayout());
     JPanel cPanel = new JPanel(new FlowLayout());
     JPanel ePanel = new JPanel(new FlowLayout());
     JPanel cPanel2 = new JPanel(new FlowLayout());
     JPanel cPanel3 = new JPanel(new FlowLayout());
     
     
     //Panels hinzufügen
     c.add(wPanel,BorderLayout.NORTH);
     wPanel.add(wPanel2,BorderLayout.NORTH);
     wPanel.add(wPanel3,BorderLayout.SOUTH);
     c.add(cPanel,BorderLayout.CENTER);
     cPanel.add(cPanel2,BorderLayout.NORTH);
     cPanel.add(cPanel3,BorderLayout.SOUTH);
     c.add(ePanel,BorderLayout.AFTER_LAST_LINE);
      
     //Hinzufügen der Komponenten       
     wPanel2.add(klartextlabel,BorderLayout.NORTH);
     wPanel2.add(klartext);
     wPanel3.add(geheimtextlabel,BorderLayout.NORTH);
     wPanel3.add(geheimtext,BorderLayout.SOUTH); 
     cPanel2.add(codewort1label);
     cPanel2.add(codewort1);
     cPanel3.add(codewort2label,BorderLayout.NORTH);       
     cPanel3.add(codewort2);
     ePanel.add(encode);
     ePanel.add(decode);
     }
  
}
Die Komponenten meinte ich. Ich bastel halt atm an einer GUI, weil ich das Zusammenklicken mit NetBeans endlich zugunsten des Verständnis einer GUI aufgeben will
 
Nein, nur am Ende für den Frame. Aber erst die Komponenten erstellen und dem Panel hinzufügen und danach dann alle in das BorderLayout des Frames ... und danach setVisible(true) für den Frame.
 
1. Nicht jeder ist ein Programmierfreak...

2. es funktioniert auch wenn ich alle Frames Visible setze NICHT...
 
Es hat nichts mit "Programmierfreak" zu tun. Du musst halt auch richtig lesen, was ich dir geschrieben habe. Da steht zweimal, dass du setVisible(true) für den Frame erst ganz am Ende aufrufen musst.

Also einfach deine Zeile 47
Code:
this.setVisible(true);
ans Ende in deiner Methode initComponents.
 
Java:
     //Setzen der Werte fürs JFrame von CodecGUI
     this.add(c);
     this.setTitle("Doppelwürfelprogramm");
     this.setSize(600,300);
     this.setVisible(true);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     }

Hab ich jetzt am Ende der entsprechenden Methode stehen, er macht aber weiterhin den selben Fehler
und zeigt Codewort1 und Codewort2 nicht an
 
Dann stell bitte nochmal den ganzen Code rein. Ich hatte nämlich (auch schon 2mal) geschrieben, dass du zuerst deine Komponenten erstellen sollst, diese dann den Panel hinzufügen, und dann die Panels ins BorderLayout vom Frame.
 
[java=28]JTextField codewort1 = new JTextField(10);
JTextField codewort2 = new JTextField(10);
JButton encode = new JButton();[/code]
 
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.Border;
public class CodecGUI extends JFrame implements ActionListener{
  Würfel würfel1 = new Würfel();
  Würfel würfel2 = new Würfel();
  JTextField codewort1 = new JTextField();
  JTextField codewort2 = new JTextField();
  JButton encode = new JButton();
  JButton decode = new JButton();
  JTextArea klartext = new JTextArea();
  JTextArea geheimtext = new JTextArea();
  JLabel klartextlabel = new JLabel("Klartext eingeben:");
  JLabel geheimtextlabel = new JLabel("Geheimtext eingeben:"); 
  JLabel codewort1label = new JLabel ("Erstes Codewort eingeben");
  JLabel codewort2label = new JLabel ("Zweites Codewort eingeben");
  
  //Konstruktor
  public CodecGUI(){
      initComponents();
  }
  
  //Aufbau der GUI-Elemente
  public void initComponents (){
     
     //JTextArea Klartext einstellen
     klartext.setText("Bitte den Klartext eingeben");
     klartext.setColumns(20);
     klartext.setRows(10);
     //JTextArea Geheimtext einstellen
     geheimtext.setText("Bitte den Geheimtext eingeben");
     geheimtext.setColumns(20);
     geheimtext.setRows(10);
        
     //Buttons mit Text versehen und ActionListener zuweisen
     encode.setText("Verschlüsseln");
     encode.addActionListener(this);
     decode.setText("Entschlüsseln");
     decode.addActionListener(this);
     //Panel erstellen
     JPanel c = new JPanel();
     c.setLayout(new BorderLayout());
          
     //Unterpanel
     JPanel wPanel = new JPanel(new FlowLayout());
     JPanel wPanel2 = new JPanel(new BorderLayout());
     JPanel wPanel3 = new JPanel (new BorderLayout());
     JPanel cPanel = new JPanel(new FlowLayout());
     JPanel ePanel = new JPanel(new FlowLayout());
     JPanel cPanel2 = new JPanel(new FlowLayout());
     JPanel cPanel3 = new JPanel(new FlowLayout());
     
     
     //Panels hinzufügen
     c.add(wPanel,BorderLayout.NORTH);
     wPanel.add(wPanel2,BorderLayout.NORTH);
     wPanel.add(wPanel3,BorderLayout.SOUTH);
     c.add(cPanel,BorderLayout.CENTER);
     cPanel.add(cPanel2,BorderLayout.NORTH);
     cPanel.add(cPanel3,BorderLayout.SOUTH);
     c.add(ePanel,BorderLayout.AFTER_LAST_LINE);
      
     //Hinzufügen der Komponenten       
     wPanel2.add(klartextlabel,BorderLayout.NORTH);
     wPanel2.add(klartext,BorderLayout.SOUTH);
     wPanel3.add(geheimtextlabel,BorderLayout.NORTH);
     wPanel3.add(geheimtext,BorderLayout.SOUTH); 
     cPanel2.add(codewort1label,BorderLayout.NORTH);
     cPanel2.add(codewort1,BorderLayout.SOUTH);
     cPanel3.add(codewort2label,BorderLayout.NORTH);       
     cPanel3.add(codewort2,BorderLayout.SOUTH);
     ePanel.add(encode);
     ePanel.add(decode); 
     
     //Setzen der Werte fürs JFrame von CodecGUI
     this.add(c);
     this.setTitle("Doppelwürfelprogramm");
     this.setSize(600,300);
     this.setVisible(true);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     }
      @Override
      //ActionListener fängt alle Buttons, dann if-Behandlung
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==encode) {
        würfel1.setzeLosung(codewort1.getText());
        }
        if (e.getSource()==decode) {
            geheimtext.setText("Pissed");
        }
    
    }
}
Ist jetzt aber schon etwas "weiterentwickelt", weil ich hab mir erlaubt schon mal ein bisschen weiter zu machen^^
 
Danke habs lösen können.

Danke auch für eure Geduld.
ich hab jetzt dafür gelernt wie ich GUIs zum laufen bekomme^^
 
Wäre auch noch schön, wenn du deiner Forumsmitwelt verraten würdest, wo der Fehler lag bzw. wie du es gelöst hast.
 

Neue Themen


Zurück
Oben