JButton绝对位于我的paint()板下面

时间:2011-08-07 18:41:44

标签: java swing jbutton

我有一个扑克游戏,我设计了一个非常漂亮的GUI,显示卡和玩家。我做了所有这些都在paint()内部扩展了JPanel,其中有很多g2d.drawImage和g2d.drawString(),并且有明确的x和y位置。

我现在的问题是我需要在它下面有几个交互式按钮..但每当我尝试添加一个JButton时,它就显示为顶部和中心。我已经使用了setLocation(x,y)和setLayout(null)以及我在其他回复中看到的所有内容,但它们似乎都不符合我的需要(或者至少我对它的位置没有很好的理解把它放在一起)

这是我的代码设置方式: pokerserver.java

public class pokerserver extends JFrame {

    public pokerserver() {
        add(new drawing());    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(720, 640);
        setLocationRelativeTo(null);
        setTitle("Poker HANGOUTS");
        setResizable(false);
        setVisible(true);            
    }

    public static void main(String args[]) {
        new pokerserver();    
    }

然后在drawing.class

public drawing() {      
    setFocusable(true);
    setBackground(new Color(39,91,46));
    setDoubleBuffered(true);        
    gameCards = new cards();
    gameCards.shuffle();

    for (int i = 0; i < 10; i++)
        seats[i] = -1;

    HQ = new HeadQuarters(this);
    HQ.start();

}

public void paint(Graphics g) {
    super.paint(g);       

    Graphics2D g2d = (Graphics2D)g;

    //All my UI code
    }

我的最后一次尝试是尝试添加

   JButton button = new JButton("TEST");
    add(button);
   button.setLocation(10, 500);

在公共图纸()的末尾。我一直在布局管理上看到一些东西,但它并没有帮助我 - 主要是因为我不确定如何实现它

这是一个屏幕截图,有助于想象我正在谈论的内容 - &gt;

http://i.imgur.com/ttvif.png

尝试将按钮放在下面。除非有办法将一个ActionListener添加到drawImage()?

2 个答案:

答案 0 :(得分:3)

对于主面板,请使用BorderLayout。

然后到“CENTER”,您可以添加所有自定义绘画的游戏面板。

然后创建一个面板并添加按钮。现在,您可以将此面板添加到主面板的NORTH。

换句话说,您不仅限于使用单个面板。

此外,自定义绘制应该在面板的paintComponent()方法中完成,而不是paint()方法。

答案 1 :(得分:2)

我不确定你追求的是什么,但这里有两种解释。

Buttons over custom painting Buttons below custom painting

我怀疑你想要第一个'Buttons over custom painting',但作为一个用户,我更喜欢第二个,'自定义绘画下面的按钮'。

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

class PaintPanel extends JPanel {

    BufferedImage bg;

    PaintPanel(LayoutManager2 layout) {
        super(layout);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        if (bg==null) {
            bg = new BufferedImage(500,500,BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = bg.createGraphics();
            GradientPaint gp = new GradientPaint(
                0,0,Color.RED,500,500,Color.BLUE);
            g2.setPaint(gp);
            g2.fillRect(0,0,500,500);
            g2.dispose();
        }

        g.drawImage(bg,0,0,getWidth(),getHeight(),this);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel buttons = new JPanel(
                    new FlowLayout(FlowLayout.CENTER));
                buttons.setOpaque(false);
                buttons.add(new JButton("Start"));
                buttons.add(new JButton("Stop"));

                PaintPanel pp = new PaintPanel(new BorderLayout());
                pp.setPreferredSize(new Dimension(200,100));

                pp.add(buttons, BorderLayout.SOUTH);

                JOptionPane.showMessageDialog(null,pp);

                JPanel gui = new JPanel(new BorderLayout());
                gui.setBackground(Color.ORANGE);
                gui.add(pp, BorderLayout.CENTER);
                gui.add(buttons, BorderLayout.SOUTH);

                JOptionPane.showMessageDialog(null,gui);
            }
        });
    }
}