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