#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’ не являются непрерывными.
Ответ №3:
но setXxxSize
(для дочерних контейнеров) работает как хаос, если вы измените с setSize()
(для TopLayoutContainer) на setPreferredSize()
, и вам нужно вызвать pack()
перед setVisible()