开发者

JButton absolute underneath my paint() board

开发者 https://www.devze.com 2023-03-26 18:08 出处:网络
I have a poker game where I designed a nice pretty GUI that displays the cards and players. I did it all extending JPanel inside paint() with a lot of g2d.drawImage\'s and g2d.drawString()\'s, with de

I have a poker game where I designed a nice pretty GUI that displays the cards and players. I did it all extending JPanel inside paint() with a lot of g2d.drawImage's and g2d.drawString()'s, with definite x and y locations.

My problem now is that I need to have a couple interactive buttons underneath it.. but whenever I try to add a JButton, it appears top and center. I've used setLocation(x, y) and setLayout(null) and everything I've seen in other replies, but none of them seem to match my need (Or at least I don't have a very well understanding of where to put it)

This is how my code is set up: 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();    
    }

And then in 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
    }

My last attempt was trying to add

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

at the end of public drawing(). I Keep seeing things on layout management, but it's not helping me -- mainly because I'm not sure how to implement it

Here's a screenshot to help visualize what I'm talking about->

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

Trying to get the button underneath. Unless there's a way to add an ActionListener to a drawImage()?


For your main panel use a BorderLayout.

Then to the "CENTER" you can add your game panel with all your custom painting.

Then create a panel and add the buttons to it. Now you can add this panel to the NORTH of the main panel.

In other words you are not restricted to using a single panel.

Also, custom painting should be done in the paintComponent() method of your panel, NOT the paint() method.


I'm not really sure what you are after, but here are two interpretations.

JButton absolute underneath my paint() board

JButton absolute underneath my paint() board

I suspect you want the 1st one 'Buttons over custom painting', but as a user I'd prefer the 2nd, with 'Buttons below 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);
            }
        });
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号