Я недавно работал с менеджером макетов GridBagLayout
и столкнулся с проблемами, когда речь заходит о используемой им сеточной системе.
Я хочу создать JButton, который я создаю здесь.:
JButton myButton = new JButton("Some text");
gc.gridx = 2;
gc.gridy = 4;
gc.weightx = 0.5;
gc.weighty = 0.5;
jp.add(myButton, gc);
Чтобы быть на 2 столбца и на 4 строки ниже с кодом:
gc.gridx = 2
gc.gridy = 4
Я определяю количество столбцов и строкв компоненте (JPanel) здесь:
GridBagConstraints gc = new GridBagConstraints();
gc.gridwidth = 2;
gc.gridheight = 10;
Однако, я получаю следующее:
![enter image description here](https://i.stack.imgur.com/wzxFF.png)
Компонентыперекрываются, несмотря на то, что находятся в явно разных разделах.Буду признателен за любую оказанную помощь.Вот полный код:
package com.UI;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class UserInterface{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = createFrame();
JPanel jp = createPanel();
addLabelAndText(jp);
f.add(jp, BorderLayout.WEST);
}
});
}
static JFrame createFrame() {
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setSize(new Dimension(600, 600));
f.setVisible(true);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
return f;
}
static JPanel createPanel() {
JPanel jp = new JPanel();
jp.setBackground(Color.gray);
jp.setLayout(new GridBagLayout());
Dimension size = jp.getPreferredSize();
size.width = 200;
jp.setPreferredSize(size);
jp.setBorder(BorderFactory.createEtchedBorder());
return jp;
}
static void addLabelAndText(JPanel jp) {//How to call a type represented by the passed String? JLabel, for example?
GridBagConstraints gc = new GridBagConstraints();
gc.gridwidth = 2;
gc.gridheight = 10;
JTextField jtb = new JTextField(5);
JLabel jl = new JLabel("Enter input here: ");
gc.gridx = 2;
gc.gridy = 0;
gc.weightx = 0.5;
gc.weighty = 0.5;
gc.anchor = GridBagConstraints.NORTHEAST;
jp.add(jtb, gc);
gc.gridx = 1;
gc.gridy = 2;
gc.weightx = 0.5;
gc.weighty = 0.5;
gc.anchor = GridBagConstraints.NORTHWEST;
gc.anchor = GridBagConstraints.FIRST_LINE_END;
jp.add(jl, gc);
JButton myButton = new JButton("Some text");
gc.gridx = 2;
gc.gridy = 4;
gc.weightx = 0.5;
gc.weighty = 0.5;
jp.add(myButton, gc);
}
}
Спасибо за любую помощь