gpt4 book ai didi

Java - 图标未对齐的 JLabel(向右)

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:26 28 4
gpt4 key购买 nike

我正在尝试为纸牌游戏(Yu-Gi-Oh :D)制作一个牌组管理器,目前我只有一个包含可用纸牌的表格和一个面板,该面板以更大的尺寸显示用户选择的纸牌以及纸牌的描述。MVCE:

    import java.awt.*;
import javax.swing.*;

public class SelectedCardPanel extends JPanel{
private final JLabel cardArea;
private final JTextArea cardInfo;

public static void main(String args[]){
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Yu-Gi-Oh!");
frame.add(new SelectedCardPanel());
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}

public SelectedCardPanel(){
super();

setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setPreferredSize(new Dimension(200, 400));

cardArea = new JLabel(" ");
cardArea.setOpaque(true);
cardArea.setBackground(Color.white);
cardArea.setPreferredSize(new Dimension(200, 300));
cardArea.setSize(cardArea.getPreferredSize());
cardArea.setBorder(BorderFactory.createLineBorder(Color.black));

cardInfo = new JTextArea();
cardInfo.setEditable(false);
cardInfo.setWrapStyleWord(true);
cardInfo.setLineWrap(true);
cardInfo.setPreferredSize(new Dimension(200, 100));
cardInfo.setBorder(BorderFactory.createLineBorder(Color.black));

add(cardArea);
add(cardInfo);
}

public final void setImage(ImageIcon icon){
cardArea.setIcon(icon);
}
}

但这就是发生的事情: deck manager在 MVCE 中:

label to the right

cardArea 位于右侧,我不明白为什么。

我在表中选择的卡在所选卡面板上没有问题。为什么 JLabel 偏向右侧?

最佳答案

问题出在 BoxLayout 上。相反,我建议使用 BorderLayout 并摆脱所有 set[Preferred]Sizes。对于文本区域,使用构造函数JTextArea(rows, cols)。对于列,您可以将其保留为 0,并且使用 BorderLayout,它将拉伸(stretch)以匹配图像的宽度

enter image description here

import java.awt.*;
import javax.swing.*;

public class SelectCardPanel extends JPanel{
private final JLabel cardArea;
private final JTextArea cardInfo;

public static void main(String args[]){
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Yu-Gi-Oh!");
SelectCardPanel panel = new SelectCardPanel();
panel.setImage(new ImageIcon(SelectCardPanel.class.getResource("images.jpg")));
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}

public SelectCardPanel(){
super();

setLayout(new BorderLayout());
//setPreferredSize(new Dimension(200, 400));

cardArea = new JLabel();
cardArea.setOpaque(true);
cardArea.setBackground(Color.white);
//cardArea.setPreferredSize(new Dimension(200, 300));
//cardArea.setSize(cardArea.getPreferredSize());
cardArea.setBorder(BorderFactory.createLineBorder(Color.black));

cardInfo = new JTextArea(5, 0);
cardInfo.setEditable(false);
cardInfo.setWrapStyleWord(true);
cardInfo.setLineWrap(true);
//cardInfo.setPreferredSize(new Dimension(200, 100));
cardInfo.setBorder(BorderFactory.createLineBorder(Color.black));

add(cardArea);
add(cardInfo, BorderLayout.PAGE_END);
}

public final void setImage(ImageIcon icon){
cardArea.setIcon(icon);
}
}

关于Java - 图标未对齐的 JLabel(向右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24634025/

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