【发布时间】:2012-01-12 00:28:26
【问题描述】:
我制作了一个摆动应用程序,其中我在面板上有一个网格布局,现在我在该面板上有 8 个自定义按钮,左右两个按钮用于导航。
现在我的问题是,当我点击导航按钮时,我想以滑动方式移动按钮,为此我设置了每个按钮的位置,
但是 Jpanel 不会自行刷新,所以它是不可见的,如果我添加对话框并单击确定,那么它看起来就像按钮正在移动。
我该怎么做,我使用了 revalidate() 和 repaint() 但它不起作用。
在点击下一个按钮时执行的函数
java.net.URL imageURL = cldr.getResource("images/" +2 + ".png");
ImageIcon aceOfDiamonds = new ImageIcon(imageURL);
button = new MyButton("ABC", aceOfDiamonds, color[3]);
Component buttons[] = jPanel1.getComponents();
ArrayList<MyButton> buttons1=new ArrayList<MyButton>();
for(int i=0;i<buttons.length;i++)
{
buttons1.add((MyButton) buttons[i]);
}
Point p=buttons[0].getLocation();
Point p1=buttons[1].getLocation();
int dis=p1.x-p.x;
System.out.println("Distance-->"+dis);
button.setLocation(buttons[buttons.length-1].getLocation().x+dis,buttons[0].getLocation().y);
jPanel1.add(button);
buttons1.add(button);
for(int i=0;i<dis;i++)
{
for(int btn=0;btn<buttons1.size();btn++)
{
int currX=buttons1.get(btn).getLocation().x;
currX--;
buttons1.get(btn).setLocation(currX, buttons1.get(btn).getLocation().y);
}
try
{
Thread.sleep(500);
}
catch (InterruptedException ex)
{
Logger.getLogger(TestPanel.class.getName()).log(Level.SEVERE, null, ex);
}
//JOptionPane.showMessageDialog(null,"fds");
jPanel1.validate();jPanel1.repaint();
}
![在此处输入图片描述][1]
【问题讨论】:
-
如需尽快获得更好的帮助,请发布SSCCE。对于使用图像的 SSCCE,要么在代码中生成它们,要么热链接到某些图像。
-
我认为没有 JButton 和布局管理器会更好。直接在自定义 JPanel 上绘制图像。有关示例,请参见 Swing Custom Painting tutorial。
-
@Paul:为什么?然后按钮将不再像按钮一样。使用 JButton 和布局管理器很容易做到这一点(请参阅下面的示例)。
-
@Paul:所以让我直截了当,而不是使用 JButtons,您建议 OP 在 JPanel 上绘制图像并使用它们,然后通过一些编程回转,制作图像表现得像 JButtons... 这应该比只使用 JButtons 更简单?我错过了什么?
-
@Paul:他已经有了令人兴奋的按钮——这不是他的问题。他只需要知道如何在页面上滚动它们。所以是的,我的 GUI 很无聊,但它不是为了“兴奋”而创建的,而是为了简单地展示一个概念,即滚动窗格中的滑动按钮。然后,他可以轻松地将这些概念应用到他“令人兴奋”的 gui 中。
标签: java swing awt jpanel jbutton