установленный размер не будет работать в java

#java #swing

#java #swing

Вопрос:

 public void start_Gui() {

    JFrame window = new JFrame("Client Program");
    window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    window.setContentPane(panel);
    panel.setLayout(new GridLayout(1,2));

    JLabel leftside = new JLabel();
    leftside.setLayout(new GridLayout(2, 1));

    JTextArea rightside = new JTextArea();
    rightside.setEditable(false);   //add scroll pane.
    rightside.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    rightside.setLayout(new FlowLayout());

    JTextArea client_text_input = new JTextArea();
    client_text_input.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    leftside.add(client_text_input);

    JLabel buttons_layer = new JLabel();
    JButton login = new JButton("Login");
    JButton logout = new JButton("Logout");
    buttons_layer.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    buttons_layer.setLayout(new GridLayout(2, 1));
    buttons_layer.add(login);
    buttons_layer.add(logout);
    leftside.add(buttons_layer);

    panel.add(leftside);
    panel.add(rightside);

    window.setSize(300, 400);
    window.setResizable(false);
    window.setVisible(true);
}
  

Я работаю над простым приложением с графическим интерфейсом клиента Java-чата. (сервер и т.д. Выполняются другими).

Это небольшой проект, но моя единственная проблема в том, что все, что я делаю, чтобы попытаться изменить размер любых компонентов в вышеупомянутом графическом интерфейсе, не сработает.

Например:

 JTextArea client_text_input = new JTextArea();
client_text_input.setSize(100,200);
  

Не будет работать.

Спасибо за помощь.

Ответ №1:

В Swing у вас есть два варианта компоновки: делайте все вручную или позвольте LayoutManager обработать это за вас.

Вызов setSize() будет работать только тогда, когда вы не используете LayoutManager . Поскольку вы используете GridLayout , вам придется использовать другие способы указать, что вы хотите.

Попробуйте вызвать setPreferredSize() и setMinimumSize() .

Ответ №2:

Две вещи — во-первых, вы должны установить предпочтительный размер области прокрутки, но, во-вторых, попытка изменить ее размер внутри обработчика componentResized — не очень эффективный метод, потому что события ‘resized’ не являются непрерывными.

проверьте изменение размера текстовой области в JFrame

Ответ №3:

но setXxxSize (для дочерних контейнеров) работает как хаос, если вы измените с setSize() (для TopLayoutContainer) на setPreferredSize() , и вам нужно вызвать pack() перед setVisible()