Как я могу помешать GridBagLayout делать микро изменения? - PullRequest
0 голосов
/ 19 апреля 2020

Я использую GridBagLayout для создания GUI в Java. У меня есть три поля, одно слева и два друг над другом справа. Я соответственно установил весовые переменные, и если я ничего не добавлю, rat ios кажется правильным. Проблема в том, что когда я добавляю элемент в поле в правом верхнем углу, соотношение между ним и тем, что ниже, меняется. Это происходит до тех пор, пока контент не станет слишком большим для панели, и JScrollPane не активируется.

enter image description here

Мой код:

val frame = JFrame("test")
frame.layout = BorderLayout()
val panel1 = JPanel(GridBagLayout())
val panel2 = JPanel().apply {
    layout = BoxLayout(this, BoxLayout.Y_AXIS)
}
val panel3 = JPanel(BorderLayout())
val scrollPane = JScrollPane(panel2)
panel1.add(scrollPane, GridBagConstraints().apply {
    gridx = 0
    gridy = 0
    weighty = 0.75
    weightx = 1.0
    fill = GridBagConstraints.BOTH
})
panel1.add(panel3, GridBagConstraints().apply {
    gridx = 0
    gridy = 1
    weighty = 0.25
    weightx = 1.0
    fill = GridBagConstraints.BOTH
})
val button = JButton("text")
var counter = 0
button.addActionListener({
    panel2.removeAll()
    for (i in 0 until ++counter) {
        panel2.add(JLabel("some text"))
    }
    frame.revalidate()
    frame.repaint()
})
panel3.add(button, BorderLayout.CENTER)
frame.add(panel1, BorderLayout.CENTER)
frame.setSize(480, 234)
frame.revalidate()
frame.repaint()
frame.isVisible = true
...