Измените размер Jtable, чтобы заполнить JFrame и все еще прокрутите - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь изменить размер двух таблиц JTable в scrollPanels, которые находятся в представлении Tab.Мне удалось установить размер кадра в 12000, 5000, но Jtable / scrollPanel не играют в мяч.

Я нашел некоторый код для установки размера столбцов таблицы, которая работала, НО вместо заполненияJframe просто добавил полосу прокрутки внизу таблицы / scrollPanel

Может кто-нибудь придумать способ заставить таблицу заполнить фрейм и при этом иметь прокрутку?Файл:

public class ViewInTablePET extends JPanel {
private String[][] rowData = new String[0][];
private String columnNames[] = {"Shop", "Type", "price", "dateAcquired", "notes"};
private DefaultTableModel tableMod = new DefaultTableModel(rowData, columnNames);
private JTable table = new JTable(tableMod);

public ViewInTablePET() {

    String bob;
    String[] dan;

    for (Integer i = 0; i < AppModel.getArrayListPet().size(); i++) { 
        bob = AppModel.getArrayListPet().get(i).toString();
        dan = AppModel.getStringAsArray(bob, "\t");
        tableMod.insertRow(i, new Object[]{dan[0], dan[1], dan[2], dan[3], dan[4]});
    }
    JScrollPane scrollPane = new JScrollPane(table);
    this.add(scrollPane, BorderLayout.CENTER);    
}
}

Файл Fram:

public class ViewInTabbs extends JFrame {

JLabel Average = new JLabel("Click a table row to get the average price");

public ViewInTabbs() {

    JTabbedPane tabs =              new JTabbedPane();
    ViewInTablePetShope petShop =   new ViewInTablePetShope();
    ViewInTablePET pet =            new ViewInTablePET();

    tabs.add("Pet Shope", (JPanel) petShop);
    tabs.add("Pets in the shop", (JPanel) pet);
    this.setTitle("Tabb View of Data");
    this.add(tabs, BorderLayout.CENTER);
    this.setSize(12000, 5000);
    this.setVisible(true);
    this.add(Average, BorderLayout.SOUTH);
}
public void setAverage(String ave) {
    this.Average.setText(ave);
}
}

Ответы [ 2 ]

2 голосов
/ 07 января 2012

В вашем классе ViewInTablePET вы добавляете JScrollPane с ограничениями BorderLayout.CENTER, но я не вижу вызова setLayout( new BorderLayout() ) в этом классе.Так как JPanel по умолчанию имеет FlowLayout, это не даст желаемого эффекта.Однако он должен работать, когда вы устанавливаете макет BorderLayout first

2 голосов
/ 07 января 2012

ааа .. при втором чтении: виновником является LayoutManager для ViewInTablePET, который по умолчанию равен FlowLayout. Изменить на BorderLayout

 public ViewInTablePET() {
    super(new BorderLayout());
    // your code
    ...
 }
...