Я искал и пытался решить проблемы, с которыми я столкнулся при изменении размера GridBagLayout
, но безрезультатно. Проблемы:Какие параметры следует использовать для разрешения этой проблемы изменения размера GridBagLayout?
таскаю в нижней части окна
JDialog
вниз, чтобы сделать его выше; панель поиска (над панелью в нижнем скриншоте) продолжала становиться выше, просто добавляя пустое пространство, которое не нужно для его содержимого (я не хочу, чтобы это пустое пространство занимало высоту от прокручивающейся таблицы ниже).Если я перемещаю правую сторону окна, чтобы сделать его немного более узкой, панель прокрутки становится слишком короткой, хотя мой экран и окно могут отображаться на его полной высоте; появляется вертикальная полоса прокрутки (. Я не люблю панели для прокрутки по вертикали, по горизонтали только)
Мои JDialog
, который держит ниже компонентов в верхней правой части использует ниже менеджера компоновки и ограничений:
JPanel level 1 uses GridBagLayout Setting 1 (see below)
JScrollPane level 2 uses GridBagLayout Setting 1
JPanel level 3 uses GridBagLayout Setting 2
JPanel level 4 uses GridBagLayout Setting 2
JPanel level 5 uses GridBagLayout Setting 2
JPanel level 5 uses GridBagLayout Setting 2
GridBagLayout.GridBagConstraints
(с)
Установка 1:
c.fill = GridBagConstraints.BOTH;
c.weightx = 99.0;
c.weighty = 99.0;
Установка 2:
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.weighty = 1.0;
Первоначально это мой JDialog
, если я не использую JScrollPane
:
Если я перетащить окно, чтобы сделать его больше, размер JPanel
(который я использовал до того, как я использовал JScrollPane
, чтобы сделать его прокручиваемым по горизонтали) остается таким, какой он есть. Я хочу добиться такого же поведения, только чтобы я сделал его горизонтально прокручиваемым.
Какой менеджер макета следует использовать для решения этой проблемы изменения размера? Если мне нужно действительно использовать GridBagLayout
, какие ограничения/настройки следует использовать? Я был бы очень признателен за любое предложение. Спасибо!
ОБНОВЛЕНИЕ 1 ------------------------------------------- -----------
Пожалуйста, ознакомьтесь с приведенным ниже примером кода примера. Обе прокручиваемые панели (КРАСНЫЙ и ГОЛУБОЙ) используют GridBagConstraints.BOTH
, weightx
и weighty
, равные 99.0
. Я хочу, чтобы красная панель имела высоту, достаточную для того, чтобы содержать текстовое поле. Я также хочу, чтобы при перетаскивании диалогового окна, чтобы увеличить окно, высота красной панели остается неизменной. Обратите внимание, что на фактическом экране может меняться количество содержимого обеих панелей (существуют кнопки добавления/минуса), поэтому настройка минимального размера панели (для изменения размера) не поможет. Пожалуйста, посоветуйте, как я должен идти по этому делу. Благодаря!
package cfr.view.search;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
public class GBLSample extends JDialog {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GBLSample frame = new GBLSample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GBLSample() {
setBounds(100, 100, 350, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
contentPane.setLayout(gbl_contentPane);
// RED PANEL ------------------------------------------------
JScrollPane sp1 = new JScrollPane();
GridBagConstraints gbc1 = new GridBagConstraints();
gbc1.fill = GridBagConstraints.BOTH;
gbc1.weightx = 99.0;
gbc1.weighty = 99.0;
contentPane.add(sp1, gbc1);
JPanel redPanel = new JPanel();
redPanel.setBackground(Color.RED);
JTextField field = new JTextField(20);
GridBagConstraints gbc2 = new GridBagConstraints();
gbc2.anchor = GridBagConstraints.PAGE_START;
gbc2.fill = GridBagConstraints.NONE;
contentPane.add(field, gbc2);
redPanel.add(field);
sp1.setViewportView(redPanel);
// BLUE PANEL ------------------------------------------------
JScrollPane sp2 = new JScrollPane();
GridBagConstraints gbc3 = new GridBagConstraints();
gbc3.fill = GridBagConstraints.BOTH;
gbc3.gridx = 0;
gbc3.gridy = 1;
gbc3.weightx = 99.0;
gbc3.weighty = 99.0;
contentPane.add(sp2, gbc3);
JPanel bluePanel = new JPanel();
bluePanel.setBackground(Color.BLUE);
sp2.setViewportView(bluePanel);
}
}
ОБНОВЛЕНИЕ 2 ---------------------------------------- --------------
По-прежнему имеют ту же проблему с размером JPanel, что и # 1 выше. Задача 1
Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer
Чтобы остановить появление вертикальных полос прокрутки, вы можете использовать политику 'VERTICAL_SCROLLBAR_NEVER' (см. [Oracle Docs JScrollPane] (https://docs.oracle.com/javase/tutorial/uiswing/components /scrollpane.html)). И действительно, сейчас немного сложно понять вашу проблему. – hamena314
Спасибо за ваши комментарии, я добавил пример кода, который, надеюсь, опишет проблему, которую я хочу исправить. Любые советы будут высоко ценится. Большое спасибо. –