Java固定元素的位置

时间:2013-05-09 09:17:48

标签: java

我需要将BlackJack游戏构建为一个研究项目。

我想用SWING GUI构建它。我需要它只是将屏幕分为两部分,然后使用相对于指定部分的绝对(x,y)位置插入元素(在我的情况下,它是带有签名ImageIcon的扩展JButton)。

类似的东西:

enter image description here

我来自Android下的开发,你可以用非常简单的方式处理元素,我觉得在SWING中迷失了。有没有AbsoluteLayout或类似的东西?

以下是我多次尝试的一个例子:

    public void run() {
    // TODO Auto-generated method stub
    JFrame  jFrame = new JFrame("Blackjack");
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Container pane = jFrame.getContentPane();
    Insets insets = pane.getInsets();

    URL url = ClassLoader.getSystemClassLoader().getResource("10_of_clubs.png");

    BufferedImage bi = null;
    try {
        bi = ImageIO.read(url);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Image resizedImage = bi.getScaledInstance(128, 186, 0);

    ImageIcon icon = new ImageIcon(resizedImage);

    ImageButton imgButton = new ImageButton(icon);
    imgButton.setPreferredSize(new Dimension(128, 186));

    ImageButton imgButton2 = new ImageButton(icon);
    imgButton.setPreferredSize(new Dimension(128, 186));

    pane.setLayout(new GridBagLayout());

    JPanel headPanel = new JPanel();
    JPanel headPanel2 = new JPanel();

    GridBagConstraints cns = new GridBagConstraints();
    cns.gridx = 0;
    cns.gridy = 0;
    cns.weightx = 0.5;
    cns.weighty = 0.2;
    cns.anchor = GridBagConstraints.FIRST_LINE_START;
    cns.fill = GridBagConstraints.BOTH;        
    headPanel.setBackground(Color.RED);

    headPanel.add(imgButton, cns);

    GridBagConstraints cns2 = new GridBagConstraints();
    cns2.gridx = 0;
    cns2.gridy = 0;
    cns2.weightx = 0.5;
    cns2.weighty = 0.2;
    cns2.anchor = GridBagConstraints.FIRST_LINE_START;
    cns2.fill = GridBagConstraints.CENTER;        
    headPanel2.setBackground(Color.BLUE);

    headPanel2.add(imgButton2, cns2);

    pane.add(headPanel);
    pane.add(headPanel2);


    jFrame.setSize(800, 600);
    jFrame.setVisible(true);
    jFrame.setLocationRelativeTo(null);
}

我得到的是:

enter image description here

TNX。

2 个答案:

答案 0 :(得分:0)

如果您想要绝对布局,请查看:http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html 一般来说,阅读有关java中的布局,你可以看看: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html 这里是所有java swing组件:visual guide: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

我认为您可以使用JSplitPane(http://algo.math.ntua.gr/~symvonis/other-material/java_material/JavaTutorial/uiswing/components/splitpane.html)来创建垂直分离

答案 1 :(得分:0)

由于您有重叠元素,您可以:

  1. 将现有的JButtons与JLayeredPane内的图片一起使用。将您的卡放在不同的图层上以进行干净的渲染。使用'setBounds()'

  2. 设置卡片绝对位置
  3. 使用Canvas自己绘制绝对位置的牌。如果采用这种方法,您还必须自己进行点击处理(检查点击是否在卡内。)