Sehr komisches Problem mit dem JPanel South und North

Code46

Erfahrenes Mitglied
Ich versuche ein Programm zu schreiben, wo ich ein JTabel habe und dadrüber ein JMenuBar. Jedoch setzte ich das BorderLayout auf North und es tauch im South auf und umgekehrt ebenso. Bin jetzt voll verwirrt. Woran kann das liegen?

Hier mein Code:
Code:
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

public class GUI1 extends JFrame
{

  ArrayList products = new ArrayList();
  JPanel panInput = new JPanel( new GridLayout(3,1)),
         panAdd = new JPanel(),
         panDelSort = new JPanel();

  JButton btnAdd = new JButton("Add"),
          btnDelete = new JButton("Delete"),
          btnSort = new JButton("Sort Products");

  JTable tab = new JTable();
  JMenuBar menubar = new JMenuBar();		          
        
  JMenu  file = new JMenu("File");
  JMenu  playlist = new JMenu("Playlist");
          
  JMenuItem exit = new JMenuItem("Exit");         
  JMenuItem AddDVD = new JMenuItem("Add DVD");
  JMenuItem UpdateDVD = new JMenuItem("Update DVD");
  JMenuItem SearchDVD = new JMenuItem("Search DVD");        

  DefaultTableModel tabMod = new DefaultTableModel();

  Product [] initialProducts = {new Product(12, "Harry Potter","4 Oscars")};

  public GUI1() {
    super("DVD List");
    tab.setModel(tabMod);
    tabMod.addColumn("Title");
	tabMod.addColumn("Price");
	tabMod.addColumn("Type");
	tabMod.addColumn("Notes");

    btnAdd.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        
      }
    });



    btnDelete.setToolTipText("Select the records to delete first");
    btnDelete.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
          
      }
    });

	
    btnSort.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
          
      }
    });                
          menubar.add(file);
          menubar.add(playlist);         
         
          file.add(exit);

          playlist.add(AddDVD);
		  playlist.add(UpdateDVD);
		  playlist.add(SearchDVD);     
          
	
  //  panDelSort.add(btnAdd);
   // panDelSort.add(btnDelete);
  //  panDelSort.add(btnSort);

    panInput.add(panAdd);
    panInput.add(panDelSort);

    panInput.add(menubar, BorderLayout.SOUTH);
    getContentPane().add(panInput, BorderLayout.NORTH);
    getContentPane().add(new JScrollPane(tab));

   // loadInitialProducts();
}


public static void main(String [] a){
    GUI1 me = new GUI1();
    me.addWindowListener(new WindowAdapter () {
       public void windowClosing(WindowEvent e) {
          System.exit(0) ;
        }
      });
    me.pack();
    me.setVisible(true);
  }


}
 
Was soll jetzt wo angezeigt werden (ich kann dir leider nicht ganz folgen)?

bei mir sieht es so aus:
attachment.php



PS: nutze doch statt den code tags die Java Tags - erhöht die lesbarkeit
 

Anhänge

  • Bildschirmfoto.png
    Bildschirmfoto.png
    4,3 KB · Aufrufe: 18
ganz einfach: weil du zum oberen JPanel panInput die beiden JPanel panAdd und panDelSort oberhalb von menubar hinzufügst.

füge deine menubar statt
Java:
    panInput.add(menubar, BorderLayout.SOUTH);
doch einfach mit
Java:
this.setJMenuBar(menubar);
hinzu. so ist das zumindest üblich.
 
danke funktioniert jetzt. Warum hast du jetzt this davor gesetzt **** Habe ich nicht ganz gerafft****?
 
kann man machen, muss man aber nicht.
Java:
this
wird benutzt, um auf Felder (der Klasse) zuzugreifen. Angenommen du hättest in der Methode bzw. im Constructor eine Variable, die den selben Namen trägt wie das Feld, so könntest du mit this auf das Feld zugreifen. Beispiel:
Java:
public class Test{
	
	private String name = "TestFeld";
	
	public void tuIrgendWas(){
		String name = "innere Variable";
		
		System.out.println(name);// output: "innere Variable"
		System.out.println(this.name);// output: "TestFeld"
	}
}

die Ausgabe beim Aufruf von tuIrgendWas() wäre dann
Code:
innere Variable
TestFeld
 

Neue Beiträge

Zurück