首先,对于模糊的标题,我不知道如何在一个句子中提出问题。
我有一个简单的程序可以将一个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);
}
}
忽略我可能忽略或错过的任何编码约定,这只是草稿。
希望有人可以提供帮助:)
答案 0 :(得分:2)
paintComponent()方法仅用于绘画!您无需覆盖此方法。
你不应该:
如果要为组件设置动画,那么当计时器触发时,您可以使用setLocation(...)或setSize()或setBounds()。该组件将自动重新绘制。
我不知道修复此问题是否可以解决您的问题,但目前的做法是错误的。