gpt4 book ai didi

java - 如果 JPanel 填满屏幕,它不会移动

转载 作者:行者123 更新时间:2023-11-30 04:20:53 25 4
gpt4 key购买 nike

首先,对于模糊的标题感到抱歉,我不知道如何用句子来表达这个问题。

我有一个简单的程序,当单击按钮时,将一个 JPanel 滑入 View ,同时将另一个 JPanel 推出。

如果第一个JPanel的宽度设置为getWidth()那么单击按钮时 JPanel 将不会移动,但是如果我将宽度更改为 getWidth() - 1它工作得很好!?!

下面是一个简单的例子

public class SlidingJPanel extends JFrame{

public JPanel panel = new JPanel();
public JPanel panel2 = new JPanel();
public JLabel label = new JLabel(" SUCCESS!!!!!!!");
public JButton button = new JButton("TESTING");

public class MyJPanel extends JPanel implements ActionListener{
public int x = 0;
public int delay = 70;
final Timer timer = new Timer(delay,this);

public MyJPanel(){};

public void paintComponent(Graphics g)
{
super.paintComponent(g);

button.setBounds(10, 20, 100, 50);
button.addActionListener(this);
panel.setBorder(BorderFactory.createLineBorder(Color.black));
panel.setBounds(x, 0, getWidth(), getHeight());
panel.add(button);
panel2.setBorder(BorderFactory.createLineBorder(Color.blue));
panel2.setBounds(x - getWidth(), 0, getWidth(), getHeight());
panel2.add(label);
add(panel);
add(panel2);
}

@Override
public void actionPerformed(ActionEvent arg0) {
timer.addActionListener(move);
timer.start();
}

ActionListener move = new ActionListener(){
public void actionPerformed(ActionEvent e){
repaint();
x++;
}
};

}

public static void main(String args [])
{
new SlidingJPanel();
}

SlidingJPanel()
{
Container container = getContentPane();
MyJPanel panel = new MyJPanel();
container.add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500,500);
setTitle("JPanel Draw Rect Animation");
setVisible(true);
}
}

忽略我可能忽略或错过的任何编码约定,这只是一个草稿。

希望有人能帮忙:)

最佳答案

paintComponent() 方法仅用于绘画!您无需重写此方法。

你不应该:

  1. 更新组件的属性(即边界、边框)
  2. 向容器添加组件

如果您想为组件设置动画,那么当计时器触发时,您可以使用 setLocation(...) 或 setSize() 或 setBounds()。该组件将自动重新绘制。

我不知道解决这个问题是否可以解决您的问题,但当前的方法是错误的。

关于java - 如果 JPanel 填满屏幕,它不会移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com