我有一个扑克游戏,我设计了一个非常漂亮的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;
尝试将按钮放在下面。除非有办法将一个ActionListener添加到drawImage()?
答案 0 :(得分:3)
对于主面板,请使用BorderLayout。
然后到“CENTER”,您可以添加所有自定义绘画的游戏面板。
然后创建一个面板并添加按钮。现在,您可以将此面板添加到主面板的NORTH。
换句话说,您不仅限于使用单个面板。
此外,自定义绘制应该在面板的paintComponent()方法中完成,而不是paint()方法。
答案 1 :(得分:2)
我不确定你追求的是什么,但这里有两种解释。
我怀疑你想要第一个'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);
}
});
}
}