GridBagLayout:如何移动指定组件
我的目标是仅将图像移动到中心位置。
但是,当我将图像向右或向左移动时,from
标签和文本字段也会被我为图像指定的量推送。
有什么办法可以防止标签和文本字段在图片移动时移动?
这是我做的,到目前为止:GridBagLayout:如何移动指定组件
// Center center = new JPanel();
center.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
Border innerC = BorderFactory.createTitledBorder("Travel details");
Border outsideC = BorderFactory.createEmptyBorder(5,5,5,5);
center.setBorder(BorderFactory.createCompoundBorder(outsideC,innerC));
fromLabel = new JLabel("From : ");
fromField = new JTextField("to",30);
fromLabel.setFont(font);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 4.0;
gbc.weighty = 4.0;
gbc.insets = new Insets(5,4,5,5);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_END;
center.add(fromLabel,gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 1;
center.add(fromField,gbc);
JButton trainImage = new JButton();
trainImage.setIcon(new ImageIcon("train.jpg"));
gbc.gridx = 1;
gbc.gridy = 20;
gbc.weightx = 10;
gbc.weighty = 20;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridwidth = 3;
gbc.ipadx = 5;
center.add(trainImage,gbc);
this.add(center, BorderLayout.CENTER);
this.setVisible(true);
主要方法:
public static void main(String[] args) { gui g = new gui();
}
回答:
上面的代码暗示的误解都weightx/y
& gridx/y
是如何工作的。此MCVE将数字更正为将按钮与图像居中,而将标签和文本字段留在左上角。
import java.awt.*; import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
public class CenteredImageInGridBag {
private JComponent ui = null;
CenteredImageInGridBag() {
initUI();
}
public final void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
JPanel center = new JPanel();
ui.add(center);
center.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
Border innerC = BorderFactory.createTitledBorder("Travel details");
Border outsideC = BorderFactory.createEmptyBorder(5, 5, 5, 5);
center.setBorder(BorderFactory.createCompoundBorder(outsideC, innerC));
JLabel fromLabel = new JLabel("From : ");
JTextField fromField = new JTextField("to", 30);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.insets = new Insets(5, 4, 5, 5);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_END;
center.add(fromLabel, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 1;
center.add(fromField, gbc);
JButton trainImage = new JButton();
BufferedImage image =
new BufferedImage(40,10,BufferedImage.TYPE_INT_RGB);
trainImage.setIcon(new ImageIcon(image));
gbc.gridx = 1;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridwidth = 3;
gbc.ipadx = 5;
center.add(trainImage, gbc);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r =() -> {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
CenteredImageInGridBag o = new CenteredImageInGridBag();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
};
SwingUtilities.invokeLater(r);
}
}
以上是 GridBagLayout:如何移动指定组件 的全部内容, 来源链接: utcz.com/qa/266310.html