2017-08-04 1 views
1

Ist es möglich, eine JTable wie die unten von Internet Download Manager zu erstellen?Wie erstellt man eine JTable wie die Tabelle in der Anwendung Internet Download Manager?

Wie Sie sehen, es zeigt, dass die letzte Spalte im Bild ist das Datum und die rechte Seite davon ist wie eine leere Spalte, sind jene Gitter aus Zeilen auf der rechten Seite nicht Zeilen und die Spalte es gehört nicht zu den echten Spalten mit Titeln, weil die ausgewählte Zeile an der Data Added Spalte endet, als ich das table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); versuchte, bekomme ich dieses Ergebnis.

So nun möchte ich die Tabelle ups füllt die leeren Räume wie im ersten Bild und wird immer noch eine horizontale Bildlaufleiste erstellen, wenn die Spalten der Tabelle die maximale Breite wie unten erreicht.

EDIT: Marco13 sagte - "Haben Sie betrachten eine leere Spalte hinzufügen"

Ja, nehmen Sie schauen einen Blick auf diese

Die leere Spalte Teil aller Spalten ist, und hat am Boden einen horizontalen Scrollbar, weil sie über den Rahmen erweitert wird, was Ich möchte tun ist ...

  1. Alle Spalten werden nicht automatisch skaliert mit Ausnahme der leeren Spalte beim Ändern der Größe des Rahmens.
  2. Die leere Spalte wird auf der rechten Seite des Rahmens fixiert, so dass bei der Größenänderung keine leeren Bereiche übrig bleiben.
  3. Die horizontale Bildlaufleiste sollte nicht angezeigt werden, wenn alle Spalten mit Titel im gesamten Bild sichtbar sind.
  4. Die leere Spalte und die darin enthaltenen Zeilen können nicht ausgewählt werden.
+0

Natürlich verwenden.Sie benötigen JTable + JScrollBar – Blasanka

+0

Ist der Kernpunkt der Frage, wie man das Gitter der Reihen auf der rechten Seite (anstatt den Raum leer zu lassen) schafft? – Marco13

+0

@ Marco13 - ja, genau. Wie Sie sehen können, handelt es sich bei diesen Zeilen auf der rechten Seite nicht um Zeilen und die Spalten davon gehören nicht zu den echten Spalten mit Titeln, da die ausgewählte Zeile in der Spalte Daten hinzugefügt endet. –

Antwort

1

Sie müssen unter Code für vertikale und horizontale Bildlaufleiste verwenden:

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED); 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

Tabelle Um die Größe, wenn JFrame skaliert. Sie müssen die getScrollableTracksViewportWidth() überschreiben.

komplette Code:

import java.awt.CardLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 
public class TableExample { 
    JFrame frame; 
    JTable table; 
    JScrollPane scrollPane; 

    public TableExample(){ 
     initComp(); 
    } 

    public void initComp(){ 
     frame = new JFrame(); 
     frame.setSize(500, 400); 
     frame.setLayout(new CardLayout()); 

     table = new JTable(100, 5){ 
       public boolean getScrollableTracksViewportWidth(){ 

        return getPreferredSize().width < getParent().getWidth(); 

       } 
      }; 

     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     //table.setFillsViewportHeight(true); 
     //table.setPreferredScrollableViewportSize(new Dimension(300, 200)); 

     scrollPane = new JScrollPane(table); 
     scrollPane.setOpaque(true); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_AS_NEEDED); 


     frame.add(scrollPane); 

     //-----this part from doc 
     TableColumn column = null; 
     for (int i = 0; i < 5; i++) { 
      column = table.getColumnModel().getColumn(i); 
      if (i == 4) { 
       column.setPreferredWidth(200); //third column is bigger 
      } else { 
       column.setPreferredWidth(100); 
      } 
     } 
     //---- 

     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new TableExample(); 
    } 
} 

Ausgang:

enter image description here

Sie eine Vorstellung von bekommen können: How to make JTable both AutoResize and horizontall scrollable? und this question @camickr answer kann auch helfen.

Schließlich, wenn Sie die Spaltengröße zu dessen Inhalt Breite (Länge des Wertes) adjest möchten, müssen Sie Table Column Adjuster

+0

erfüllt immer noch nicht die Anforderungen meiner ersten Frage. Sie Code ist wie mein zweites Beispielbild. –

+0

@MangKanor Ich habe vergessen, Code zur Größenänderung hinzuzufügen. Jetzt habe ich die Antwort aktualisiert, – Blasanka

Verwandte Themen