Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle?

Guten Tag habe ein kleines Problem ich möchte ein Frame erstellen welches eine menuleite und eine tabelle beinhaltet. komm nicht darauf warum nur die MenuLeiste erzeugt wird.

Meine Main Klasse

Java:
public class Main {
 public static void main (String args[]){

    Frame ft= new Frame();
 }

}

Die Klasse wo das Frame erzeugt wird

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;





    public class Frame implements ActionListener {

     JFrame Frame;
     Container container;

     // Menüleiste
     JMenuBar menueLeiste;

     // Menüleiste Elemente
     JMenu File;
     JMenu Help;


     // Datei
     JMenuItem New;
     JMenuItem Save;
     JMenuItem Save2;
     JMenuItem beenden;







     public  Frame() {
          Frame = new JFrame("Tabelle");// Anzahl der Tabellen die schon erstellt wurden fehtl noch

//
          container = Frame.getContentPane();


          // Menüleiste erzeugen
          menueLeiste = new JMenuBar();

          // Menüelemente erzeugen
          File = new JMenu("File");
          Help = new JMenu("Help");

          // Untermenüelemente erzeugen
          New = new JMenuItem("New");
          New.addActionListener(this);
          beenden = new JMenuItem("beenden");
          beenden.addActionListener(this);
          Save= new JMenuItem("Save");
          Save.addActionListener(this);
          Save2= new JMenuItem("Save As");
          Save2.addActionListener(this);

          // Menüelemente hinzufügen
          menueLeiste.add(File);
          menueLeiste.add(Help);

          // Untermenüelemente hinzufügen
          File.add(New);
          File.add(Save);
          File.add(Save2);
          File.add(beenden);

// Das JTable initialisieren
        Vector title = new Vector();
        title.add("A");
        title.add("B");
        title.add("C");
        title.add("D");
        title.add("E");

        JTable table = new JTable();
// JTable table = new JTable(createData(), title);


      
         JScrollPane pane = new JScrollPane(table);
        // mit diesem Befehl wird die Leiste links angesetzt.
        pane.setRowHeader(new TableRowHeader(table, pane));

        Frame.getContentPane().add(pane);
          Frame.add(menueLeiste, BorderLayout.NORTH);
          Frame.add(table,BorderLayout.CENTER);
      //    Frame.add(new JScrollPane(), BorderLayout.CENTER);

          Frame.setSize(400, 300);
          Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          Frame.setVisible(true);
     }

     public void actionPerformed(ActionEvent object) {
          if (object.getSource() == New){
               System.out.println("öffnen wurde angeklickt");
          }
          if (object.getSource() == beenden){
               System.out.println("beenden wurde angeklickt");
          }
          if (object.getSource() == Save){
               System.out.println("Save wurde angeklickt");
          }
          if (object.getSource() == Save2){
               System.out.println("Save As wurde angeklickt");
          }
     if (object.getSource()==Help){
         System.out.println("Help wurde angeklickt");
     }
     }

    public JFrame getFrame() {
        return Frame;
    }

public class JTableDemo {
  

    // Produziert genug Daten, dass man scrollen kann.
    private  Vector createData() {
        Vector data = new Vector();

        for (int i = 1; i < 14; i++) {
            Vector temp = new Vector();
            for (int j = 0; j < 2; j++) {
                data.add(temp);
            }
        }

        return data;
    }
}

}
 
Zuletzt bearbeitet von einem Moderator:
Variablen immer klein, ganz besonders nicht so wie Klassen benennen!
keine eigene Klassen wie Java-Klassen benennen, Frame gibts auch schon

Komponenten immer nur einmal hinzufügen, wenn die table einmal in einem ScrollPane steckt, dann nirgendwo anders mehr
und entscheide dich, ob du getContentPane().add() benutzt oder nur add() :

> JScrollPane pane = new JScrollPane(table);
> Frame.getContentPane().add(pane);
> Frame.add(table,BorderLayout.CENTER);
 
okay habs hinbekommen das meine tabelle nun angezeigt wird allerdings fehlen jetzt die Header der Spalten!! (die sachen mit der umbennung kommt noch)
Kann dies durch des BorderLayout kommen und er einfach die Menuleiste übder die Header legt?


Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;



public class Hauptfenster implements ActionListener {

    JFrame Frame;
    Container container;
    // Menüleiste
    JMenuBar menueLeiste;
    // Menüleiste Elemente
    JMenu File;
    JMenu Help;
    // Datei
    JMenuItem New;
    JMenuItem Save;
    JMenuItem Save2;
    JMenuItem beenden;

    private static Vector createData() {
        Vector data = new Vector();

        for (int i = 1; i < 24; i++) {
            Vector temp = new Vector();
            for (int j = 0; j < 2; j++) {
                data.add(temp);
            }
        }

        return data;
    }

    public Hauptfenster() {
        Frame = new JFrame("Tabelle");// Anzahl der Tabellen die schon erstellt wurden fehtl noch

//
        //container = Frame.getContentPane();


        // Menüleiste erzeugen
        menueLeiste = new JMenuBar();

        // Menüelemente erzeugen
        File = new JMenu("File");
        Help = new JMenu("Help");

        // Untermenüelemente erzeugen
        New = new JMenuItem("New");
        New.addActionListener(this);
        beenden = new JMenuItem("beenden");
        beenden.addActionListener(this);
        Save = new JMenuItem("Save");
        Save.addActionListener(this);
        Save2 = new JMenuItem("Save As");
        Save2.addActionListener(this);

        // Menüelemente hinzufügen
        menueLeiste.add(File);
        menueLeiste.add(Help);

        // Untermenüelemente hinzufügen
        File.add(New);
        File.add(Save);
        File.add(Save2);
        File.add(beenden);

// Das JTable initialisieren
        Vector title = new Vector();
        title.add("A");
        title.add("B");
        title.add("C");
        title.add("D");
        title.add("E");

        JTable table = new JTable(createData(), title);
//createData(), title



        JScrollPane pane = new JScrollPane(table);
        // mit diesem Befehl wird die Leiste links angesetzt.
        pane.setRowHeader(new TableRowHeader(table, pane));

        Frame.add(pane);
        Frame.pack();
//        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//        frame.pack();
//        frame.setVisible(true);





        Frame.add(menueLeiste, BorderLayout.NORTH);

        Frame.add(table, BorderLayout.CENTER);

        Frame.add(pane,BorderLayout.WEST);
//          Frame.add(table,BorderLayout.CENTER);
        // Frame.add(new JScrollPane(), BorderLayout.CENTER);

        Frame.setSize(400, 300);
        Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Frame.setVisible(true);




}

//    public void actionPerformed(ActionEvent e) {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }

public void actionPerformed2(ActionEvent object) {
          if (object.getSource() == New){
               System.out.println("öffnen wurde angeklickt");
          }

if (object.getSource() == beenden){
               System.out.println("beenden wurde angeklickt");
          }

if (object.getSource() == Save){
               System.out.println("Save wurde angeklickt");
          }

if (object.getSource() == Save2){
               System.out.println("Save As wurde angeklickt");
          }

if (object.getSource()==Help){
         System.out.println("Help wurde angeklickt");
     }

}

    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}



Klasse für die Header
Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class TableRowHeader extends JViewport implements AdjustmentListener{
    private JTable  table;
    private Cell cell;

    public TableRowHeader( JTable table, JScrollPane parent ) {
        this.table = table;
        cell = new Cell();
        setView( new Dummy() );
        setPreferredSize( new Dimension( 100, 0 ) );

        parent.getVerticalScrollBar().addAdjustmentListener( this );
        parent.getHorizontalScrollBar().addAdjustmentListener( this );
    }

    public void adjustmentValueChanged( AdjustmentEvent e ) {
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent( g );
        Rectangle rec = TableRowHeader.this.getViewRect();

        int y = 1;
        int rows = table.getRowCount();
        int index = 1;

        if( rows == 1 )
            return;

        if( y + table.getRowHeight(1 ) < rec.y ){
            while( index < rows ){
                int height = table.getRowHeight( index );

                if( y + height < rec.y ){
                    y += height;
                    index++;
                }
                else
                    break;
            }
        }

        int max = rec.y + rec.height;
        int width = getWidth();

        while( y <= max && index <= rows ){
            int height = table.getRowHeight( index );
            cell.set( index );
            SwingUtilities.paintComponent( g, cell, this, 0, y-rec.y, width, height );

            y += height;
            index++;
        }
    }

    // Nur eine leere Hülle, damit eine "Simulation" aufgebaut werden kann.
    private static class Dummy extends JComponent{
        public void paint( Graphics g ){
            // do nothing
        }

        public void update( Graphics g ) {
            // do nothing
        }
    }

    // Stellt den Knopf für eine Reihe dar.
    private class Cell extends JLabel {
        public void set( int row ) {
            setHorizontalAlignment( CENTER );
            setForeground( TableRowHeader.this.getForeground() );
            setBackground( TableRowHeader.this.getBackground() );
            setFont( TableRowHeader.this.getFont() );
            setText( "" + row );
            setBorder( UIManager.getBorder( "TableHeader.cellBorder" ) );
        }
    }
}
 

Zurück
Oben