Java Swing: относительное позиционирование и автоматическое изменение размера? - PullRequest
2 голосов
/ 05 октября 2010

У меня есть функция createUI (), которая загружает JPanel в СЕВЕР, ЮГ, ВОСТОК.

private void createUI() {
    add(createToolBar(), BorderLayout.NORTH);
    add(createDataView(), BorderLayout.SOUTH);
    add(createHistoryView(), BorderLayout.EAST);

    createMenuBar();

    setTitle("My Application");

}

Каждый компонент отображается в правильном месте, однако все они находятся в JPanel фиксированного размера. Я хотел бы знать, может ли JPanel полностью заполнить область BorderLayout.

Например, createDataView () - это простая Jpanel с таблицами. Я бы хотел, чтобы он расширялся по горизонтали и имел фиксированную высоту.

private JPanel createDataView(){
        JPanel panel = new JPanel();

        String data[][] = {{"001","vinod","Bihar","India","Biology","65","First"},
                           {"002","Raju","ABC","Kanada","Geography","58","second"},
                           {"003","Aman","Delhi","India","computer","98","Dictontion"},
                           {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"},
                           {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"}};
        String col[] = {"Roll","Name","State","country","Math","Marks","Grade"};
        JTable table = new JTable(data,col);
        table.setPreferredScrollableViewportSize(new Dimension(900,100));
        JTableHeader header = table.getTableHeader();
        header.setBackground(Color.yellow);
        JScrollPane pane = new JScrollPane(table);
        table.setAutoResizeMode(JTable.WIDTH);
        table.doLayout();
        panel.add(pane);
        return panel;
}                      

Сейчас я полагаюсь на ручную настройку размера. Тем не менее, я хотел бы получить текущую ширину окна и установить ее, как показано ниже.

table.setPreferredScrollableViewportSize(new Dimension(900,100));

Ответы [ 2 ]

1 голос
/ 06 октября 2010

С помощью borderlayout границы NORTH, SOUTH, EAST и WEST принимают размер панели по умолчанию, но CENTER расширяется и занимает все оставшееся пространство.Я бы предложил поместить ваш createDataView в этот раздел макета.

1 голос
/ 06 октября 2010

Макет по умолчанию для нового JPanel равен FlowLayout;GridLayout может быть альтернативой для вашего просмотра данных.Вы можете сравнить возможности в Визуальное руководство для менеджеров по макету .

JPanel panel = new JPanel(new GridLayout(1, 0));

Приложение: Ваш setAutoResizeMode() выглядит подозрительноJTable.WIDTH - это , маловероятно, что оно будет только случайно действительным значением.GridLayout хорошо работает по умолчанию, JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS, но вы можете поэкспериментировать с другими настройками.

table.setAutoResizeMode(JTable.WIDTH);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...