2017-05-09 2 views
0

Ich möchte die Breite erhöhen, die die Tabelle auf Jpanel deckt.Fix die Länge der Java GUI Tabelle

JFrame jf = new JFrame(); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setTitle("Person Table"); 
    jf.setSize(1100, 700); 

    JPanel jp1 = new JPanel();jp1.setBackground(Color.green); 

    JPanel jp2 = new JPanel(); jp2.setBackground(Color.red); 

    jp1.setSize(1100, 400); 
    jp2.setSize(980, 200); 

    JTable jt = new JTable(data,columnNames); jt.setSize(900, 350); 
    jt.setBackground(Color.ORANGE); 
      // Add table to JScrollpane 
    JScrollPane sp = new JScrollPane(jt); sp.setSize(1000, 380); 
    sp.setBackground(Color.CYAN); 
    jp1.add(sp); 

    jf.add(jp1); 
    jf.add(jp2); 
    jf.setVisible(true); 

Dies ist die Ausgabe

enter image description here

Ich habe bemerkt, dass, wenn ich Scroll nicht der Spaltenname steigt verschwindet und Größe schwenken ..

enter image description here

Aber Ich möchte auch, dass der Spaltenname erscheint.

+0

Verwenden Sie einen LayoutManager wie 'MigLayout'? Dies vereinfacht normalerweise Dinge, siehe hier: http://StackOverflow.com/a/38457852/1368690 – hamena314

+0

Ihre Variablennamen sind schrecklich. Macht Ihren Code sehr schwer zu lesen. – Michael

+0

JFrames sind standardmäßig auf BorderLayout festgelegt. Stellen Sie daher beim Hinzufügen von Komponenten zu einem JFrame sicher, dass Sie eine BorderLayout-Position festlegen, z. BorderLayout.CENTER. Die CENTER-Position ist fast sicher, wo Sie ein Rollfeld mit einem Tisch platzieren möchten. Der Grund für das Verschwinden der Tabellenüberschriften beim Entfernen des Bildlauffensters liegt darin, dass der JTableHeader der Tabelle automatisch als JScrollPanes-Spaltenüberschriftsansicht festgelegt wird, wenn eine Tabelle einem Bildlauffenster hinzugefügt wird. Ohne den Bildlauf müssten Sie den JTableHeader dem Layout selbst hinzufügen. – Michael

Antwort

3

Halten Sie die Bildlauffenster und ersetzen jp1 damit,

AKA Wechsel:

jf.add(jp1); 

zu

jf.add(jsp); 

Dies wird die Tabelle übernehmen die gesamte Grünfläche * machen. Wenn dies nicht gewünscht ist, verwenden Sie verschachtelte Layouts.

* Abhängig vom LayoutManager. In diesem Fall wird FlowLayout verwendet, wodurch die Größe der Komponente nicht geändert wird. Wenn Sie eine GridLayout oder BorderLayout verwenden, würde der gesamte grüne Bereich ausgefüllt werden.

+0

Es hat funktioniert .. Danke – Rohaitas

+0

Kein Problem! Markieren Sie die Antwort als akzeptiert, damit die Leute wissen, dass diese Frage beantwortet wurde. Danke – DCON

+1

JPanel hat FlowLayout als Standard in der API (akzeptiert nur getPreferredSize, und ist nicht in der Größe veränderbar), muss zu BorderLayout, Ereignis ändern. Gitterstruktur – mKorbel