Layout Probleme (Kein Adden möglich)

Status
Nicht offen für weitere Antworten.
S

Slider

Gast
Hallo, habe gerade ein dringendes Problem.

Ich schreibe ein Tagebuch, bei dem immer wenn auf "speichern" geklickt wird, eine Methode aufgerufen wird, bei der der Eintrag in einem JTabbedPane Fenster angeziegt wird.

Wenn nun 3 einträge geschrieben werden, sollen logischer Weise 3 Einträge unter einander stehen.
Ich dachte mir ich mache für jeden eintrag ein Panel, und immer wenn man speichert, wird das panel dem GridbagLayout zugewiesen.

Problem 1: ich kann innerhalb meiner If Anweisung nicht adden.

Code:
public void showPanel(int count){
		writePanel.setLayout(new GridLayout(5,1));
		if(eintragListe.size() > 0){
			DiaryEintrag ein = eintragListe.get(count);
			System.out.println("Datum: "+ein.getDatum()+"\nTitel: "+ein.getTitel()+"\nNummer: "+eintragListe.size()+"\nText: "+ein.getText()+"\n");
			
			

			writePanel.add(new JButton("3"));
		}
		writePanel.add(new JButton("1"));
		writePanel.add(new JButton("2"));
		this.add(writePanel);
	}

Button 3 wird nicht angezeigt, kann mir jemand helfen?
 
G

Guest

Gast
Ja, die werden komischer weise ausgeführt, hab das mit mehreren System.out.println() schon getestet
 

Cyph3rlink

Mitglied
hmm keine Ahnung. probier halt mal was pasiert wenn du ein FlowLayout verwendest nur so zu Testzwecken.
Oder stell etwas mehr Code zur Verfügung :D
 

L-ectron-X

Gesperrter Benutzer
Schreib mal als letzte Anweisung noch ein
Code:
validate();
in der Klasse dazu, die eine GUI-Änderung zur Laufzeit erfährt. Damit wird ein Neuzeichnen der Oberfläche angefordert. Diese Maßnahme wird immer dann notwendig, wenn zur Laufzeit GUI-Komponenten hinzugefügt, oder in ihrer Position geändert werden.
 
G

Gast

Gast
edit: in der DiaryPanel klasse die Methode showPanel(int count)
ist die Methode, die in das Lesen Fenster geladen wird.

Vielen Dank für die Hilfe!
 
G

Guest

Gast
nochmal edit: Die Buttons sind Platzhalten für die Eintrag-Panels.
Mein problem: immer wenn ich "speichern" klicke möchte ich, das ein neus Panel hinzugefügt wird (zu testzwecken ein button).
validate hat leider nicht funktioniert.
und morgen solls fertig sein :(
 

L-ectron-X

Gesperrter Benutzer
Hab dein Programm mal ausprobiert und überflogen.
Wenn du nach dem Speichern den Frame größer ziehst erscheinen danach die gesuchten Buttons, was darauf hinweist, dass ein validate() eingefügt werden muss.

Edit:
Achso, und du solltest es unbedingt vermeiden AWT- mit Swing-Komponenten zu mischen.
Die Klasse DiaryPanel erbt von Panel und die darin benutzten Komponenten sind aus dem AWT-Paket, während der Rest der Anwendung mit Swing arbeitet.
Und warum heißt die Referenz "mainPanel", wenn sie auf eine Instanz von java.awt.Container zeigt?
Wozu soll mainPanel benutzt werden?
 
G

Guest

Gast
Ich werde die komponenten auf Swing umstellen.
Komischerweise, wenn ich das Frame größer ziehe, erscheint bei mir nichts..

bzw. hast du eine Idee wie ich es realisieren kann, das immer wenn speichern geclickt wird, ein neuer Button hinzugefügt wird? (Den ich später durch ein Panel mit den Eintragsinformationen ersetzen werde).

Gerade habe ich gemerkt, das die Buttons ja im falschen JTabbedPane Fenster stehen...
Ich blick schon langsam garnichtmehr durch, ich möchte sie doch im "lesen" frame haben...

Danke für deine mühe!
 
G

Guest

Gast
edit: wenn ich es jetzt noch schaffe, das die buttons im anderen Tab angezeigt werden, werde ich es sicher schaffen alleine weiter zu kommen.

Danke das du dir bemühst mir zu helfen :D
 

L-ectron-X

Gesperrter Benutzer
Anonymous hat gesagt.:
bzw. hast du eine Idee wie ich es realisieren kann, das immer wenn speichern geclickt wird, ein neuer Button hinzugefügt wird? (Den ich später durch ein Panel mit den Eintragsinformationen ersetzen werde).

Gerade habe ich gemerkt, das die Buttons ja im falschen JTabbedPane Fenster stehen...
Ich blick schon langsam garnichtmehr durch, ich möchte sie doch im "lesen" frame haben...
Wenn man dir helfen soll, musst du schon präzisere Angaben machen...

Ich hab deine Klasse DiaryPanel mal umgebaut, dass das funktioniert und du nur mit Swing-Elementen arbeitest:
Code:
package a3_tagebuch;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.text.*;

import javax.swing.*;

public class DiaryPanel extends JPanel{
   private JLabel datum,titel,pic,bb;
   private JTextField datumFeld,titelFeld;
   private JTextArea textFeld;
   private JButton jetzt,speichern,neu,bla;
   private Color back = new Color(213,232,255);
   private Font text1 = new Font("Trebuchet MS",Font.PLAIN,14);
   private JPanel datumPanel = new JPanel();
   private JPanel titelPanel = new JPanel();
   private JPanel textPanel = new JPanel();
   private JPanel buttonPanel = new JPanel();
   private JPanel writePanel = new JPanel();
   private JPanel mainPanel = new JPanel();
   //private GregorianCalendar cal = new GregorianCalendar(); //geändert, mit DateFormat realisiert
   private DateFormat formatter;
   private int count = 0;
   private int flag;
   private Image logo;
   private ImageIcon icon;
   private ArrayList<DiaryEintrag> eintragListe = new ArrayList();
   private GridBagLayout gbl = new GridBagLayout();
   private GridBagConstraints gbc = new GridBagConstraints();
   private GridBagLayout gbl1 = new GridBagLayout();
   private GridBagConstraints gbc1 = new GridBagConstraints();
   private GridLayout grid;
   private JPanel entryPanel = new JPanel();
   
   public DiaryPanel(int dFlag){
      flag = dFlag;
      if(flag == 0){
         writeMethod();
      }
      if(flag == 1){
         showPanel(count);
      }
      setFont(text1);
      logo = getToolkit().getImage("images/title.jpg");
      icon = new ImageIcon(logo);
      pic = new JLabel(icon, JLabel.CENTER);
      
      datum = new JLabel("Datum:");
      
      datumFeld = new JTextField("Format: 3.8.2007, 12:00", 30);
      jetzt = new JButton("Jetzt");
      jetzt.addActionListener(new ButtonHandler());
      
      titel = new JLabel("Titel:");
      titelFeld = new JTextField(37);
      
      textFeld = new JTextArea("Eintrag",22,41);
      textFeld.setLineWrap(true);
      
      speichern = new JButton("Speichern");
      speichern.addActionListener(new ButtonHandler());
      
      neu = new JButton("Neu");
      neu.addActionListener(new ButtonHandler());
      
      datumPanel.setLayout(new FlowLayout());
      titelPanel.setLayout(new FlowLayout());
      textPanel.setLayout(new FlowLayout());
      buttonPanel.setLayout(new FlowLayout());
      mainPanel.setLayout(gbl);
      datumPanel.add(datum);
      datumPanel.add(datumFeld);
      datumPanel.add(jetzt);
      
      titelPanel.add(titel);
      titelPanel.add(titelFeld);
      
      textPanel.add(new JScrollPane(textFeld));
      
      buttonPanel.add(speichern);
      buttonPanel.add(neu);
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.insets = new Insets(2,2,2,2);
      gbc.gridx = 0;  // x-Position im gedachten Gitter
      gbc.gridy = 0;  // y-Position im gedachten Gitter
      gbc.gridheight = 1;
      gbl.setConstraints(pic, gbc);
      mainPanel.add(pic);
      
      gbc.gridx=0; 
      gbc.gridy=1;
      gbc.gridheight = 1;
      gbl.setConstraints(datumPanel, gbc);
      mainPanel.add(datumPanel);
      
      gbc.gridx=0; 
      gbc.gridy=2;
      gbc.gridheight = 1;
      gbl.setConstraints(titelPanel, gbc);
      mainPanel.add(titelPanel);
      
      gbc.gridx=0; 
      gbc.gridy=3;
      gbc.gridheight = 1;
      gbl.setConstraints(textPanel, gbc);
      mainPanel.add(textPanel);
      
      gbc.gridx=0; 
      gbc.gridy=4;
      gbc.gridheight = 1;
      gbl.setConstraints(buttonPanel, gbc);
      mainPanel.add(buttonPanel);
      
      formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
   }

   public void writeMethod(){
      
      this.add(mainPanel);
   }

   public String getDate(){
      /*cal.setTimeZone(TimeZone.getTimeZone("CET"));
      String tempDate = cal.get(Calendar.DATE) + "." + (cal.get(Calendar.MONTH)+1) + "." + cal.get(Calendar.YEAR) + ", " + cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE);
      return tempDate;*/
      return formatter.format(new Date());
   }

   /*public void paint(Graphics g) {
      g.setColor(back);
      g.fillRect(0,0,500,600);
      title = getToolkit().getImage("images/title.jpg");
      g.drawImage(title,129,10,this);
      g.setColor(Color.black);
   }*/

   public void showPanel(int count){
      writePanel.setLayout(new GridLayout(5,1));
      if(eintragListe.size() > 0){
         DiaryFrame fr = new DiaryFrame();
         DiaryEintrag ein = eintragListe.get(count);
         System.out.println("Datum: "+ein.getDatum()+"\nTitel: "+ein.getTitel()+"\nNummer: "+eintragListe.size()+"\nText: "+ein.getText()+"\n");

         writePanel.add(new JButton("3"));
      }
      writePanel.add(new JButton("1"));
      writePanel.add(new JButton("2"));
      this.add(writePanel);
      validate();
   }
   
   private class ButtonHandler implements ActionListener{
      public void actionPerformed (ActionEvent evt){
         if(evt.getSource() == jetzt){
            datumFeld.setText(getDate());
         }
         if(evt.getSource() == neu){
            int confirm = JOptionPane.showConfirmDialog(DiaryPanel.this, "Neuen Eintrag beginnen und Diesen verwerfen?", "Neuer Eintrag", JOptionPane.YES_NO_OPTION);
            if (confirm == JOptionPane.YES_OPTION) {
               datumFeld.setText("Format: 3.8.2007, 12:00");
               titelFeld.setText("");
               textFeld.setText("Eintrag:");
            }
         }
         if(evt.getSource() == speichern){
            JOptionPane.showMessageDialog(DiaryPanel.this,"Eintrag gespeichert");
            DiaryEintrag dEntry = new DiaryEintrag(count,titelFeld.getText(),datumFeld.getText(),textFeld.getText());
            eintragListe.add(dEntry);
            showPanel(count);
            count++;
         }
      }
   }
}

Deine Main-Class sieht bei mir jetzt so aus:
Code:
package a3_tagebuch;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class DiaryFrame extends JFrame{
   private JTabbedPane panes;
   
   public DiaryFrame(){
      super("Slider's Diary");
      setSize(500, 600);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      DiaryPanel writePanel = new DiaryPanel(0);
      DiaryPanel readPanel = new DiaryPanel(1);
      panes = new JTabbedPane();
      JPanel read = new JPanel();
      panes.addTab("Verfassen",writePanel);
      panes.addTab("Lesen",readPanel);
      getContentPane().add(panes);
   }
   public static void main(String args[]){
      new DiaryFrame().setVisible(true);
   }
}
 
G

Guest

Gast
Wow, finde es wirklich toll von Dir mir so zu helfen!
Bist du beruflich Programmierer?

Also zu dem vorher beschriebenen Problem:

Die add() Geschichte funktioniert jetzt wie ich es mir vorgestellt habe, mit dem Problem, das die Buttons im JTabbedPane in das(den) falschen Tab geschrieben werden, sprich neben das Eingabefenster.
Ich habe mittels JTabbedPane 2 "Registerkarten" erstellt, und in der Registerkarte "Lesen", sollen nun die Buttons (meine Platzhalter für die Eintrag-Panels hineingeschrieben werden.
Im Prinzip genau so, wie es momentan ist, nur eben nicht im "Verfassen" Tab.

Hast du vielleicht eine Idee, wie man das realisieren könnte?
Ich versuche es nun schon die ganze Zeit auf etliche Möglichkeiten, nur es ist das erste mal das ich mit JTabbedPane arbeite (und ich programmiere auch erst seit diesem Schuljahr objektorientiert)

Nochmal vielen Dank für deine Mühen, und das du mir als Anfänger hilfst!
 

L-ectron-X

Gesperrter Benutzer
Dazu benötigst du Zugriff auf das JTabbedPane-Objekt.
Das ist aber in deiner Main-Class implementiert. Um da ranzukommen müsstest du eine get()-Methode schreiben, die dir die Referenz auf das JTabbedPane-Objekt liefert, um damit dann die Buttons ins richtige Tab zu setzen.
Für meinen Geschmack ist das Ganze aber auch verkehrt angefangen worden.
Du solltest besser für das JPanel in dem Du Eingaben machst und das, in dem Du lesen willst jeweils ein eigenes Panel schreiben, nicht die Funktionalität für beide in eines packen und dann wieder müsham auseinander "polken".
So ist es auch einfacher die Button auf dem richtigen Panel unterzubringen.
 
G

Gast

Gast
Und wenn ich das JTabbed Pane in der Panel Klasse implementiere?
 
G

Gast

Gast
Bzw. Ich würde die Komplette showPanel auch in einer eigenen Klasse realisieren. wenn ich die arrayList protected setze, müsste ich ja trotzdem darauf zugrifen können oder?
 

L-ectron-X

Gesperrter Benutzer
Das wird vom Design her nur immer schwerer zu handhaben.
Trenne das vernünftig, dann ist es übersichtlicher, weniger fehleranfällig und besser zu warten.
 
G

Guest

Gast
Wie kann ich am besten eine get Methode für eine ArrayList schreiben?
 
G

Gast

Gast
OK, ich glaub es hat sich erübrigt:

public ArrayList getList(){
return eintragListe;
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Layout Probleme Java Basics - Anfänger-Themen 2
M Layout Probleme Java Basics - Anfänger-Themen 10
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0
C Erste Schritte Layout an Bildschirmauflösung anpassen Java Basics - Anfänger-Themen 9
N Project layout eclipse ( seperate ordner für klassen ? ) Java Basics - Anfänger-Themen 1
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
N Erste Schritte JOptionPane - zerstörtes Layout Java Basics - Anfänger-Themen 2
R Card Layout refresh nach Änderung Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
F Welchen Layout Manager wählen? Java Basics - Anfänger-Themen 13
Q Layout Manager Java Basics - Anfänger-Themen 6
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0
T Layout Java Basics - Anfänger-Themen 9
L Anderes Layout für JOptionPane? Java Basics - Anfänger-Themen 6
N Datum abgleichen und Frage zum Layout Java Basics - Anfänger-Themen 3
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
M Text linksbündig im Box'ed Layout Java Basics - Anfänger-Themen 4
M Interface Das Null-Layout Java Basics - Anfänger-Themen 12
P GUI - Layout per Laufzeit erstellen/verändern? Java Basics - Anfänger-Themen 6
B Daten eingeben und ausgeben mit einem Layout Java Basics - Anfänger-Themen 17
L Erste Schritte Layout eines Java Programms Java Basics - Anfänger-Themen 5
P Layout Manager - Welches Layout für Memory? Java Basics - Anfänger-Themen 7
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
JAVAnnik layout erstellen Java Basics - Anfänger-Themen 24
R Welcher Layout Manager-für so ein Fenster? Java Basics - Anfänger-Themen 5
J Unterschiedliche Spaltengröße im Grid(bag)layout Java Basics - Anfänger-Themen 6
M Layout einfach bilden Java Basics - Anfänger-Themen 4
F Card Layout Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
L Layout Frage Java Basics - Anfänger-Themen 2
N GUI-Layout-Problem&Anordnung Java Basics - Anfänger-Themen 14
M Frage zu GUI-Layout Java Basics - Anfänger-Themen 4
N Welches Layout soll ich verwenden? Java Basics - Anfänger-Themen 3
W Unterschied JFrame und JLabel bezüglich Layout? Java Basics - Anfänger-Themen 2
J Layout bei Swing Java Basics - Anfänger-Themen 4
W Grid Layout wird falsch dargestellt Java Basics - Anfänger-Themen 4
S Layout JDialog Java Basics - Anfänger-Themen 9
T Border Layout alle mittleren felder gleich groß Java Basics - Anfänger-Themen 3
D Der richtige Layout Manager Java Basics - Anfänger-Themen 8
T Eine doofe Frage zum null-Layout-Manager Java Basics - Anfänger-Themen 6
T Layout Problem Java Basics - Anfänger-Themen 2
B Frage zum Layout Java Basics - Anfänger-Themen 6
M zufällige auswahl eines Panels aus Grid Layout Java Basics - Anfänger-Themen 3
K Layout Java Basics - Anfänger-Themen 6
J Layout Java Basics - Anfänger-Themen 8
B package org.jdesktop.layout does not exist Java Basics - Anfänger-Themen 8
A center in einer border layout Java Basics - Anfänger-Themen 8
E Layout für Prozentaufteilung Java Basics - Anfänger-Themen 3
kulturfenster Tic Tac Toe Layout-Sorgen Java Basics - Anfänger-Themen 25
A Problem mit BorderLayout und null-Layout Java Basics - Anfänger-Themen 5
N Bildbeispiel von Layout: wie nutze ich das GBLayout dafür? Java Basics - Anfänger-Themen 17
mwildam JToolBar und Group-Layout (NetBeans) dockt nicht richtig an Java Basics - Anfänger-Themen 3
Q Classe durch Buttonklick im Layout öffnen Java Basics - Anfänger-Themen 4
A frames layout Java Basics - Anfänger-Themen 4
G Bilder im Grid-Bag-Layout Java Basics - Anfänger-Themen 2
H Layout wird nicht eingehalten . Java Basics - Anfänger-Themen 3
G Welcher Layout-Manager? *confused* Java Basics - Anfänger-Themen 2
D Layout beim Applet Java Basics - Anfänger-Themen 6
G Layout Java Basics - Anfänger-Themen 3
G Layout Java Basics - Anfänger-Themen 9
U Welches Layout? Java Basics - Anfänger-Themen 6
I Layout anpassen Java Basics - Anfänger-Themen 4
L Layout Problem Java Basics - Anfänger-Themen 2
J Tabelle erneuert bei Card Layout nicht Java Basics - Anfänger-Themen 2
M ScrollPane Flow Layout Java Basics - Anfänger-Themen 4
P Null Layout Java Basics - Anfänger-Themen 17
R JPanel und Layout Java Basics - Anfänger-Themen 4
Bierhumpen Swing und Layout Java Basics - Anfänger-Themen 18
M JButton im JLabel Layout Java Basics - Anfänger-Themen 12
Z JButton vs Layout Java Basics - Anfänger-Themen 8
E Scrollbar mit NULL- Layout? Java Basics - Anfänger-Themen 4
L Swing - Layout-Problem Java Basics - Anfänger-Themen 12
B Null-Layout oder GridLayout usw. Java Basics - Anfänger-Themen 5
L Layout Java Basics - Anfänger-Themen 5
DEvent anfängerfrage: wieso layout erst beim verändern? Java Basics - Anfänger-Themen 6
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben