Java-图标未对齐的JLabel(向右)
我正在尝试为纸牌游戏制作一个牌组管理器(Yu-Gi Oh:D),目前我只有一张桌子,上面有可用的牌,还有一个面板,上面显示了用户选择的更大尺寸的牌以及牌的描述。 MVCE: 但事实就是这样: 在MVCE中: 卡片区域向右,我不明白为什么 我在表中选择的卡会毫无问题地进入所选卡面板。Java-图标未对齐的JLabel(向右),java,swing,jtable,jlabel,Java,Swing,Jtable,Jlabel,我正在尝试为纸牌游戏制作一个牌组管理器(Yu-Gi Oh:D),目前我只有一张桌子,上面有可用的牌,还有一个面板,上面显示了用户选择的更大尺寸的牌以及牌的描述。 MVCE: 但事实就是这样: 在MVCE中: 卡片区域向右,我不明白为什么 我在表中选择的卡会毫无问题地进入所选卡面板。 为什么JLabel会走向正确?问题在于BoxLayout。相反,我建议使用BorderLayout,去掉所有set[Preferred]大小。对于文本区域,使用构造函数JTextArea(行、列)。对于可以保留为0
为什么JLabel会走向正确?问题在于BoxLayout。相反,我建议使用
BorderLayout
,去掉所有set[Preferred]大小。对于文本区域,使用构造函数JTextArea(行、列)
。对于可以保留为0的列,使用BorderLayout,它将拉伸以匹配图像的宽度
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);
}
}
为了更快地获得更好的帮助,发布一个(最简单的完整和可验证的示例)。“我不知道在同一篇文章中问这两个问题是否合适”哇!你在一篇文章中处理了两个问题,其中没有一个“?”。。它们是什么?@AndrewThompson关于JLabel向右移动和表格没有添加新行的问题……我认为,由于标题中没有指定第二行,这可能是一种不好的方式……“我想知道如何解决这两个问题,提前感谢。”呵呵,我真的应该问你,不是吗?请把问题缩小到一个范围。@AndrewThompson很抱歉,谢谢你的指导:)
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);
}
}