这是我的JPanel
。第一个按钮始终可见,但仅当您在其上放置一个光标时,才能看到该条纹。问题出在哪里?
P.S。如果可以,请使用简单的英语,因为我不会说英语
public class GamePanel extends JPanel implements KeyListener{
GamePanel(){
setLayout(null);
}
public void paint(Graphics g){
JButton buttonShip1 = new JButton();
buttonShip1.setLocation(10, 45);
buttonShip1.setSize(40, 40);
buttonShip1.setVisible(true);
add(buttonShip1);
JButton buttonShip2 = new JButton();
buttonShip2.setLocation(110, 145);
buttonShip2.setSize(440, 440);
buttonShip2.setVisible(true);
add(buttonShip2);
}
}
答案 0 :(得分:5)
阅读Swing教程How to Use FlowLayout中的部分,了解使用按钮和布局管理器的简单示例。
答案 1 :(得分:5)
如果您想避免出现问题并正确学习Java Swing,请查看他们的教程here。
这里讨论的问题太多了,所以我会尽量保持简单。
您正在使用null
布局。大多数情况下都避免使用null
布局,因为通常会有一个布局完全符合您的要求。它需要一些时间才能运行,但有一些默认值in this tutorial使用起来相当简单。那里有一些漂亮的图片,向您展示您可以对每个布局做些什么。如果您使用布局管理器,通常不需要在JButton等大多数组件上使用setLocation, setSize
或setVisible
。
您正在Swing应用程序中调用paint
方法。你想调用paintComponent
因为你使用的是Swing而不是Awt。您还需要在super.paintComponent(g)
方法的第一行调用paintComponent
方法,以便正确覆盖其他paintComponent
方法。
经常调用paint
/ paintComponent
相关方法。您不想在其中创建/初始化对象。 paint
/ paintComponent
方法不是一次性的方法,就像听起来一样。他们不断被调用,你应该围绕这个设计你的GUI。将您的paint
相关方法设计为事件驱动,而不是顺序。换句话说,使用思维模式对paintComponent
方法进行编程,使GUI对事物做出持续反应,而不是像正常程序那样按顺序运行。这是一种非常基本的方法,希望并不会让你感到困惑,但是如果你去查看那个教程,你最终会看到我的意思。
Java中有两种基本类型的GUI。一个是Swing
和。{
另一个是Awt
。查看this answer on stackoverflow了解一下
很好描述这两个。
以下是JPanel上两个按钮的示例。
public class Test
{
public static void main(String[] args)
{
JFrame jframe = new JFrame();
GamePanel gp = new GamePanel();
jframe.setContentPane(gp);
jframe.setVisible(true);
jframe.setSize(500,500);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static class GamePanel extends JPanel{
GamePanel() {
JButton buttonShip1 = new JButton("Button number 1");
JButton buttonShip2 = new JButton("Button number 2");
add(buttonShip1);
add(buttonShip2);
//setLayout(null);
//if you don't use a layout manager and don't set it to null
//it will automatically set it to a FlowLayout.
}
public void paintComponent(Graphics g){
super.paintComponent(g);
// ... add stuff here later
// when you've read more about Swing and
// painting in Swing applications
}
}
}