Установка JTable внутри панели - PullRequest
11 голосов
/ 19 мая 2011

Я использую JTable и добавляю его на панель, которая использует gridbaglayout следующим образом:

JTable qdbs = new JTable(rowData, columnNamesVector);
qdbs.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

panel.add(qdbs, c);

Я не хочу, чтобы таблица была в области прокрутки, но я хочустол, чтобы занять всю ширину панели.Как бы мне этого добиться?

SSCCE по запросу:

import javax.swing.*;
import java.awt.*;

public class Main{

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

    public static class TestFrame extends JFrame{
    public TestFrame() {
        this.setTitle("SSCCE");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        c.gridx = 0;
        c.gridy = 0;

        c.insets = new Insets(10,10,10,10);
        JTable testTable = new JTable(10,2);
        panel.add(testTable, c);

        this.add(panel);
        this.pack();
        this.setVisible(true);
    }
    }

}

Я бы хотел, чтобы эта таблица всегда занимала всю ширину панели (кроме вставок).В настоящее время размер таблицы не изменяется при изменении размера фрейма.

Ответы [ 6 ]

12 голосов
/ 26 мая 2011

Вам нужно добавить ограничения, чтобы указать макету, что делать с большим количеством места.В свой SSCCE добавьте эти предметы:

  c.fill = GridBagConstraints.BOTH;
  c.weightx = 1;
  c.weighty = 0;
5 голосов
/ 19 мая 2011
import java.awt.*;
import javax.swing.*;

public class Test
{
    public static void main(String args[]) throws Exception
    {
        JPanel panel = new JPanel( new GridBagLayout() );
        JTable table = new JTable(5, 5);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        panel.add(table, gbc);

        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
}

Если вам нужна дополнительная помощь, опубликуйте SSCCE , который демонстрирует проблему.

4 голосов
/ 01 июня 2011

Следующий кадр будет корректно изменять размер таблицы при изменении размера кадра.

public class Sandbox {

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

public static class TestFrame extends JFrame {
    public TestFrame() {
        this.setTitle("SSCCE");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        c.gridx = 0;
        c.gridy = 0;

        c.insets = new Insets(10, 10, 10, 10);
        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1;
        c.weighty = 1;
        JTable testTable = new JTable(10, 2);
        panel.add(testTable, c);

        this.add(panel);
        this.pack();
        this.setVisible(true);
    }
}

}

4 голосов
/ 19 мая 2011

мммм

Алексей Блисковский написал panel.add(qdbs, c);

это неправильно, нет, никогда не делайте этого, вы забыли обернуть вас JTable в ScrollPane , а затем вы можете играть с некоторыми из LayoutManager , для связанные примеры для LayoutManager проверить GridBagConstraints для GrigBagLayout

4 голосов
/ 19 мая 2011

c это GridBagConstraint или что-то в этом роде, я полагаю? Самое простое, что можно сделать, это установить LayoutManager из JPanel в BorderLayout, а затем просто добавить с ограничением BorderLayout.CENTER.

3 голосов
/ 19 мая 2011

Возможно с:

GridBagConstraints.fill = GridBagContraints.BOTH;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...