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

回到顶部