Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton绝对值在我的画板下方()_Java_Swing_Jbutton - Fatal编程技术网

Java JButton绝对值在我的画板下方()

Java JButton绝对值在我的画板下方(),java,swing,jbutton,Java,Swing,Jbutton,我有一个扑克游戏,在那里我设计了一个漂亮的GUI来显示牌和玩家。我用大量的g2d.drawImage和g2d.drawString扩展了JPanel inside paint,并确定了x和y的位置 我现在的问题是,我需要在它下面有几个互动按钮。。但每当我尝试添加JButton时,它都会显示在顶部和中间。我已经使用了setLocationx、y和setLayoutnull以及我在其他回复中看到的所有内容,但它们似乎都不符合我的需要,或者至少我不太清楚应该将它们放在哪里 以下是我的代码的设置方式:

我有一个扑克游戏,在那里我设计了一个漂亮的GUI来显示牌和玩家。我用大量的g2d.drawImage和g2d.drawString扩展了JPanel inside paint,并确定了x和y的位置

我现在的问题是,我需要在它下面有几个互动按钮。。但每当我尝试添加JButton时,它都会显示在顶部和中间。我已经使用了setLocationx、y和setLayoutnull以及我在其他回复中看到的所有内容,但它们似乎都不符合我的需要,或者至少我不太清楚应该将它们放在哪里

以下是我的代码的设置方式: 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();    
    }
然后在绘画课上

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
    }
在公共绘图的末尾。我一直在关注布局管理,但它对我没有帮助——主要是因为我不知道如何实现它

下面是一个屏幕截图,可以帮助您直观地了解我所说的内容->


试着把按钮放在下面。除非有办法将ActionListener添加到drawImage?

对于主面板,请使用边框布局

然后到中心,你可以添加你的游戏面板与你的所有自定义绘画

然后创建一个面板并将按钮添加到其中。现在可以将此面板添加到主面板的北部

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


另外,自定义绘制应该使用面板的paintComponent方法,而不是paint方法来完成。

我不太确定您想要的是什么,但这里有两种解释

我怀疑你想要第一个“按钮多于自定义绘画”,但作为一个用户,我更喜欢第二个“按钮低于自定义绘画”

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);
            }
        });
    }
}

我看到其他人说,paintComponent和paint有什么区别?我要给面板上的东西一个喷绘,负责画组件,它的边界和它的子对象。如果绘制替代不更改边框或子绘制,则不希望替代绘制,而希望替代绘制组件。否则,你就有可能弄乱边界和儿童绘画,造成意想不到的后果。教程会告诉你这些,好的。至于最初的问题,我认为主要的问题是我对面板的混淆——我知道如何将组件添加到布局中并以这种方式排列它们,但我如何将所有的油漆组合到一个面板中?在教程中,它有panel.addcomponent,但我使用的是g2d.drawImageimage,x,y?抱歉,我的java swing知识有限,因为我学习了Android开发的java,所以我浏览了这一部分:PI正在寻找第二个。我明白了,我并没有把我的绘图类当作自己的JPanel:P,我使用的是一个代码大纲,我在一个游戏开发教程中用到了这个大纲,所以整个组件的概念让我很困惑。。我试图在绘图类中创建按钮,而不是主按钮
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);
            }
        });
    }
}