Приложение не меняет размер своего компонента - PullRequest
1 голос
/ 08 января 2012

У меня есть это приложение, но когда я изменяю размер окна, элемент JTextArea внутри него не изменяется с окном. Почему?

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class ExampleGUI {

private JTextArea text_area;
private JScrollPane scroll_bar;

private JFrame frame;
private JPanel panel;

public ExampleGUI(){

    frame = new JFrame("Example GUI");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    text_area = new JTextArea();
    scroll_bar = new JScrollPane(text_area);

    panel = new JPanel();
    panel.add(scroll_bar);

    frame.add(panel);

    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable(){public void run(){new ExampleGUI();}});
}
}

Ответы [ 3 ]

3 голосов
/ 08 января 2012

Ваш макет фрейма - FlowLayout. Это не меняет размер детей. От Документы :

Схема потока позволяет каждому компоненту принимать свой естественный (предпочтительный) размер.

Вам лучше использовать BorderLayout и поместить панель в ЦЕНТР.

Заменить это:

frame.setLayout(new FlowLayout());
frame.add(pane);

с этим:

frame.setLayout(new BorderLayout());
frame.add(pane, BorderLayout.CENTER);

Кроме того, как указывает Hovercraft, если вам нужно, чтобы размеры отдельных компонентов изменялись при изменении размеров панели, тогда вам нужно иметь ненулевые веса в GridBagConstraints.

3 голосов
/ 08 января 2012

Это учитывает рекомендации Hovercraft Full Of Eels & Ted Hopp с некоторыми другими хитростями.

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import java.util.Collection;

public class AziendaGUI implements ActionListener {

private JButton view_list;
private JButton save_list;
private JTextArea text_area;
private JScrollPane scrollpane;
private JPanel pane;

private JFrame frame;
private GridBagLayout grid;

public AziendaGUI() {

    frame = new JFrame("Immobiliari s.p.a");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setLayout(new BorderLayout());

    view_list = new JButton("View Property");
    view_list.setActionCommand("view_list");
    view_list.addActionListener(this);

    save_list = new JButton("Save List");
    save_list.setActionCommand("save_list");
    save_list.addActionListener(this);

    text_area = new JTextArea(10,22);
    text_area.setEditable(false);
    scrollpane = new JScrollPane(text_area);

    grid = new GridBagLayout();
    pane = new JPanel();
    pane.setLayout(grid);

    /* Set Constraints view_list button */
    grid.setConstraints(view_list, new GridBagConstraints(0,0,1,1,0.0,0.0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
    pane.add(view_list);

    /* Set Constraints save_list button */
    grid.setConstraints(save_list,new GridBagConstraints(1,0,1,1,0.1,0.1,GridBagConstraints.EAST,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
    pane.add(save_list);

    frame.add(scrollpane);

    frame.add(pane, BorderLayout.NORTH);

    frame.pack();
    frame.setVisible(true);
}

private void store(){

    String file_name = JOptionPane.showInputDialog("Inserisci il nome del file");

}

@Override
public void actionPerformed(ActionEvent e){

    String s = e.getActionCommand();

    if(s.equals("view_list")){
    }
    if(s.equals("save_list")){

        store();
    }
}


public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable(){@Override
                                              public void run(){new AziendaGUI();}});
}
}
3 голосов
/ 08 января 2012

Вам необходимо установить веса GridBagConstraint x и y (weightx и weightty - 5-й и 6-й параметры в конструкторе GridBagConstraint) на положительное значение, отличное от 0.0.Вам следует прочитать учебные пособия по GridBagLayout, если вы собираетесь использовать его, поскольку он довольно сложный.Некоторые имели большой успех, вкладывая более простые макеты или используя сторонние макеты, такие как MigLayout .

...