我想开发一个Java Applet,它显示了Sorting的可视化。所以我写了这样的代码......
public class SortNumbersGUI extends JApplet {
private static final long serialVersionUID = 1L;
List<Integer> randomList;
JLabel numberLabel;
JButton sortButton;
@Override
public void init() {
randomList = MyRandom.myRandom();
setSize(400, 400);
setLayout(new FlowLayout());
sortButton = new JButton("Sort");
sortButton.setBounds(50, 0, 50, 10);
sortButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Collections.sort(randomList);
removeAll();
repaint();
}
});
this.add(sortButton);
super.init();
}
@Override
public void paint(Graphics g) {
int y = 20;
for (Integer i : randomList) {
g.drawString(i.toString(), 0, y + 10);
g.fillRect(20, y, (i * 10) / 10, 5);
y = y + 20;
}
}
}
但是,我在这里遇到两个问题..
排序按钮,JButton并不总是可见。当我将鼠标光标放在该排序按钮位置时,只有它出现。
当我调用repaint()方法时,结果会重写。如图所示
Result Image(因为我没有名声,所以我粘贴了图片链接。)
请帮我解决这个问题。 先谢谢你。
答案 0 :(得分:2)
@Override
public void paint(Graphics g) {
// ..
应该是:
@Override
public void paint(Graphics g) {
super.paint(g); // paints **BG**, border etc.
// ..
答案 1 :(得分:0)
你的问题是你覆盖了paint而不是paintComponent,而且你也没有调用super.paint / Component(这也是一个很好的做法,尽管这里可能不是100%必需的。)
由于你如何覆盖paint(),当绘制JApplet时,你的按钮不会被自动绘制