当前位置: 首页 > 知识库问答 >
问题:

用绝对布局定位GUI组件

陈泰宁
2023-03-14

我正在用java创建一个纸牌游戏,以更好地学习GUI组件。我似乎理解我正在使用的各种ActionListener类,但是在窗口中将组件定位到我想要的位置时遇到了困难。

我试图设置窗口的格式类似于基本的纸牌布局(甲板,丢弃堆,4套衣服堆叠在顶部和7个纸牌堆叠在他们下面)。我的想法是,我需要在JFrame组件中使用一个绝对布局来手动地将不同的堆栈元素放在它们应该放在的位置(也许这不是最好的方法?)。为此,我尝试使用setlocation(x,y)setlocation(Point)setlocation(x,y、width,height)等,但似乎没有任何效果。我只是得到一个空白的窗口。

下面是我的代码尝试在窗口中手动放置组件的示例:

public class SolitaireTable extends JFrame {
    public static final int SUIT_STACK_CNT = 4;
    public static final int SOL_STACK_CNT = 7;
    public static final Point DECK_POS = new Point(5,5);
    public static final Point DISCARD_POS = new Point(73+10, 5); //73 is width of card images and 10 gives it a 5 px border to left and right
    public static final Point SUIT_STACK_POS = new Point(DISCARD_POS.x + 73 + 92, 5);
    public static final Point SOL_STACK_POS = new Point(DECK_POS.x, DECK_POS.y + 97 + 5); //97 is heigh of card image. 5 gives it a border of 5

    public SolitaireTable()
    {
        setLayout(null);

        ImageIcon cardImg = new ImageIcon("images/2c.gif");
        Card card1 = new Card(cardImg);
        add(card1);
        card1.setBounds(50, 50, card1.getWidth(), card1.getHeight());

    }

    public static void main(String[] args)
    {
        SolitaireTable table = new SolitaireTable();
        table.setTitle("Solitaire");
        table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        table.setVisible(true);
        table.setSize(800, 600);
    }
}


public class Card extends JComponent {
    private ImageIcon img;//current image displayed (either front or back of card)
    private Point coords;
    private String suit;
    private int face; //use ints instead of strings to make descending face pattern calculations easier. 0 = ace, 1= 2, 10 = j, 12 = k, etc
    private String color;
    private boolean revealed; //whether see face or back of card
    private ImageIcon frontImage; //image of card's face side (set in constructor)

    public Card(ImageIcon img){
        this.img = img;

    }

    public void moveTo(Point p) {
        coords = p;
    }

    //================================================================= getWidth
    public int getWidth() {
        return img.getIconWidth();
    }

    //================================================================ getHeight
    public int getHeight() {
        return img.getIconHeight();
    }
}

共有1个答案

白博赡
2023-03-14

您使用ImageIcon创建卡片类,但您从不在任何地方绘制图标,因此没有什么可绘制的,您得到的是一个空屏幕。

您需要将绘画代码添加到类中。有关更多信息和工作示例,请参见Swing教程中关于自定义绘画的部分。

或者创建一个JLabel并将图标添加到标签中,然后将标签添加到组件中。(如果使用这种方法,请不要忘记设置卡片组件的布局管理器)。

 类似资料:
  • css问题 下面代码 为什么ul使用绝对定位居中 a元素变成块元素 文字会垂直 代码 为什么用绝对定位居中宽度展示文字会被挤下去 如下图 如果用flex布局居中就是没问题 代码如下图 效果如下图

  • 我有一个主框架,我想用卡片布局在中心位置显示我的新用户类的对象。这里是我的主类 这是我的新用户类 我希望NewUser的对象显示在主类的中心位置

  • 主要内容:本节引言,1.四大控制属性(单位都是dp):,2.使用示例:,本节小结本节引言 前面已经介绍了,Android中的五大布局,在本节中会讲解第六个布局AbsoluteLayout(绝对布局), 之所以把这个放到最后,是因为绝对布局,我们基本上都是不会使用的,当然你也可以直接跳过这一 篇博文,不过作为一个喜欢增长姿势的程序员,我们还是可以了解这个AbsoluteLayout布局的, 相信大部分学过Java的都知道,我们在Java swing(不是spring哦)都用过这

  • 本节将介绍 Android 原生布局的最后一个布局,也是最不常用的布局——绝对布局(AbsoluteLayout)。目前在 Android SDK 中处于被弃用的状态,原因是前面学习过的 5 大布局太过强大。确实,绝对布局在开发中中可能从来都用不到,但是我们作为学习过慕课教程的高级玩家,需要一方面扩展自己的知识面,另一方面需要学习绝对布局的设计思想及设计理念,这对我们今后的学习都是有益无害的。 1

  • 本文向大家介绍相对布局和绝对布局,position:relative和obsolute。相关面试题,主要包含被问及相对布局和绝对布局,position:relative和obsolute。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 相对定位relative: 如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。

  • 我们正在将应用程序从Swing迁移到JavaFX。我们有瘦客户端和服务器。服务器告诉客户端每个屏幕中有哪些组件,它们默认的x,y,宽度,高度,数据...因此它们是在运行中创建的。没有预定义的.fxml。每一个屏幕都是由几个独立的帧组成的,在这些帧内,它的行为与外部是一样的。如果用户调整屏幕大小,则允许某些组件(框架和内部部件)增长(沿垂直、水平或两个方向)。它可以是任何组件(主要是table、se