gpt4 book ai didi

java - GridBagLayout 没有正确对齐图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:28 24 4
gpt4 key购买 nike

最初我有一张甲板图像和图像下方的文本“Deck”,看起来不错

pic1

public class GuiTut extends JPanel { 
private GridBagConstraints c = new GridBagConstraints();
private JLabel deckLabel = new JLabel();

public GuiTut() {
setLayout(new GridBagLayout());

try {
deck = ImageIO.read(new File("resources/images/deck.jpg"));
} catch (Exception e) {}

c.gridx = 0;
c.gridy = 0;
JLabel deckPic = new JLabel(new ImageIcon(deck));
add(deckPic, c);

deckLabel.setText("Deck");
c.gridx = 0;
c.gridy = 1;
add(deckLabel, c);
}

但是在我添加了 gridLayout 面板之后,我的整个 GUI 设计就乱七八糟了。如您所见,我的甲板图片没有与我的 gridLayout 的第一行正确对齐和我的文本“deck”被一些宽的空间隔开。

pic2

public class GuiTut extends JPanel { 
private GridBagConstraints c = new GridBagConstraints();
private JLabel deckLabel = new JLabel();
private JPanel gridLayoutPanel = new JPanel(new GridLayout(2, 0));
private JLabel[] label = new JLabel[14];

public GuiTut() {
setLayout(new GridBagLayout());

try {
card = ImageIO.read(new File("resources/images/card.jpg"));
} catch (Exception e) {}

for(int i = 0; i < 14; i++) {
label[i] = new JLabel(new ImageIcon(card);
gridLayoutPanel.add(label[i]);
}

try {
deck = ImageIO.read(new File("resources/images/deck.jpg"));
} catch (Exception e) {}

c.gridx = 0;
c.gridy = 0;
JLabel deckPic = new JLabel(new ImageIcon(deck));
add(deckPic, c);

deckLabel.setText("Deck");
c.gridx = 0;
c.gridy = 1;
add(deckLabel, c);

c.gridx = 1;
c.gridy = 0;
add(gridLayoutPanel, c);
}

我想要的是牌组图像与 gridLayout 的第一行对齐,文本 “deck” 就在牌组图像的正下方,但我不能好像没听懂。

最佳答案

热链接图片

enter image description here enter image description here

  1. 对于甲板标签,您可以只设置标签的文本并设置垂直/水平文本位置

    JLabel label = new JLabel(new ImageIcon(new URL(DECK_URL)));
    label.setText("DECK");
    label.setHorizontalTextPosition(JLabel.CENTER);
    label.setVerticalTextPosition(JLabel.BOTTOM);
  2. 对于甲板定位问题,您可以使用不同的布局管理器,例如外部面板的 BorderLayout,以及甲板面板的默认流布局。这些卡片仍将是 GridLayout。在需要时嵌套面板通常很有帮助

例子

enter image description here

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GuiTest {

private static final String DECK_URL = "http://i.stack.imgur.com/xNffR.png";
private static final String CARD_URL = "http://i.stack.imgur.com/uVS1D.png";

private static JPanel createDeckPanel() {
JPanel panel = new JPanel();
try {
JLabel label = new JLabel(new ImageIcon(new URL(DECK_URL)));
label.setText("DECK");
label.setHorizontalTextPosition(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.BOTTOM);
panel.add(label);
} catch (Exception ex) {
ex.printStackTrace();
}
return panel;
}

private static JPanel createCenterPanel(int rows, int cols) {
JPanel panel = new JPanel(new GridLayout(rows, cols));
for (int i = 0; i < rows*cols; i++) {
try {
panel.add(new JLabel(new ImageIcon(new URL(CARD_URL))));
} catch (Exception ex) {
ex.printStackTrace();
}
}
return panel;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(createDeckPanel(), BorderLayout.LINE_START);
panel.add(createCenterPanel(2, 6));
JOptionPane.showMessageDialog(null, panel);
}
});
}
}

关于java - GridBagLayout 没有正确对齐图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com