Java 如何删除白色背景以及如何添加木棒?
我正在尝试为我的项目创建一个台球游戏,但我很难同时添加棍子和球。另外,当我添加球时,JFrame的背景变成白色,实际上应该是绿色(桌子的颜色) 非常感谢你的帮助 我试着使用Java 如何删除白色背景以及如何添加木棒?,java,swing,billiards,Java,Swing,Billiards,我正在尝试为我的项目创建一个台球游戏,但我很难同时添加棍子和球。另外,当我添加球时,JFrame的背景变成白色,实际上应该是绿色(桌子的颜色) 非常感谢你的帮助 我试着使用图形。例如g2d.setBackground(Color.green)。这不起作用 public class Practice_Window implements MouseListener, MouseMotionListener, KeyListener { JFrame Practice_Mode = new
图形
。例如g2d.setBackground(Color.green)
。这不起作用
public class Practice_Window implements MouseListener, MouseMotionListener, KeyListener {
JFrame Practice_Mode = new JFrame();
Balls myBalls = new Balls();
Stick myStick = new Stick();
public void PracticeWindow()
{
Practice_Mode.setSize(1000, 500);
Practice_Mode.setVisible(true);
Practice_Mode.setResizable(false);
Practice_Mode.setTitle("Practice Mode");
Practice_Mode.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Practice_Mode.getContentPane().setBackground(new Color(0, 1, 0, 0.5f)); //Not visible after i add my balls
Practice_Mode.getRootPane().setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.GREEN));
Practice_Mode.add(myBalls);
//Practice_Mode.add(myStick);
//JPanel p = new JPanel();
//Timer t= new Timer(10, myBalls);
}
我很难同时添加球杆和球 那么,为什么您要一次编写整个应用程序而不进行任何测试呢?为什么代码中有计时器?为什么你有键盘监听器 学习一步一步地开发应用程序。写一点代码做一些测试。当它工作时,添加更多功能。在添加更复杂的逻辑之前,先获得基本的正确答案
Practice_Mode.add(myBalls);
//Practice_Mode.add(myStick);
JFrame的默认布局管理器是BorderLayout。默认情况下,将构件添加到框架(且不指定约束)时,构件将移到中心。只有一个零部件可以添加到中心,因此只有最后添加的零部件才可见
你的基本设计是错误的。你不希望球和棍子有单独的面板。您希望有一个“台球游戏板”面板来绘制多个对象。所以这个面板会画所有的球和棍子。这样,所有对象都由同一个类管理
也不应使用变量名创建单个对象。这限制了可以控制的对象数量。相反,将要绘制的对象保留在ArrayList中,然后绘制方法迭代ArrayList并绘制每个对象
有关此方法的工作示例,请参见
我加上球,JFrame的背景变成白色
指定颜色时不要使用alpha值。对于绿色,您只需使用:
practiceMode.getContentPane().setBackground( Color.GREEN );
我很难同时添加球杆和球
那么,为什么您要一次编写整个应用程序而不进行任何测试呢?为什么代码中有计时器?为什么你有键盘监听器
学习一步一步地开发应用程序。写一点代码做一些测试。当它工作时,添加更多功能。在添加更复杂的逻辑之前,先获得基本的正确答案
Practice_Mode.add(myBalls);
//Practice_Mode.add(myStick);
JFrame的默认布局管理器是BorderLayout。默认情况下,将构件添加到框架(且不指定约束)时,构件将移到中心。只有一个零部件可以添加到中心,因此只有最后添加的零部件才可见
你的基本设计是错误的。你不希望球和棍子有单独的面板。您希望有一个“台球游戏板”面板来绘制多个对象。所以这个面板会画所有的球和棍子。这样,所有对象都由同一个类管理
也不应使用变量名创建单个对象。这限制了可以控制的对象数量。相反,将要绘制的对象保留在ArrayList中,然后绘制方法迭代ArrayList并绘制每个对象
有关此方法的工作示例,请参见
我加上球,JFrame的背景变成白色
指定颜色时不要使用alpha值。对于绿色,您只需使用:
practiceMode.getContentPane().setBackground( Color.GREEN );
你的棍子和球正在扩展
JPanel
,它通常被用作一个容器来分组一组JComponents
,它们是按钮和UI元素。您看到的图形错误很可能是Java试图使用默认的边框布局将面板并排排列,因为它认为在您尝试实现自由形状时,您需要按钮面板和其他东西
更好的方法是在JPanel
上将棍子和球渲染为原始形状,而不是将其本身渲染为JPanel
。这是通过让他们实现Shape
或至少给他们draw
方法来实现的;本教程将很有用。也有人和你的处境相似,并且有与你相关的答案 你的棍子和球正在扩展JPanel
,它通常被用作一个容器,将一组JComponents
,它们是按钮和UI元素。您看到的图形错误很可能是Java试图使用默认的边框布局将面板并排排列,因为它认为在您尝试实现自由形状时,您需要按钮面板和其他东西
更好的方法是在JPanel
上将棍子和球渲染为原始形状,而不是将其本身渲染为JPanel
。这是通过让他们实现Shape
或至少给他们draw
方法来实现的;本教程将很有用。也有人和你的处境相似,并且有与你相关的答案 1)这里有很多代码,很难阅读,因为它不遵循firstWordLowerCaseVariable
,firstWordLowerCaseMethod()
,FirstWordUpperCaseClass
和所有单词小写常量
。2) 在Stick
类中,您有一个方法PaintComponent
,它应该是PaintComponent
(Java区分大小写),添加@Override
注释以从Java编译器获取警告。3) 为什么两行之间有这么大的间距?在添加所有元素之前,使框架可见会使阅读变得更加困难<代码>练习模式。设置可见(真)
应该是添加所有组件后该类上的最后一行。5) 红色
,黄色
,白色
practiceMode.getContentPane().setBackground( Color.GREEN );