覆盖Java Applet中的结果

时间:2014-12-04 19:27:08

标签: java swing jbutton japplet

我想开发一个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;
        }
    }
}

但是,我在这里遇到两个问题..

  1. 排序按钮,JButton并不总是可见。当我将鼠标光标放在该排序按钮位置时,只有它出现。

  2. 当我调用repaint()方法时,结果会重写。如图所示

  3. Result Image(因为我没有名声,所以我粘贴了图片链接。)

    请帮我解决这个问题。 先谢谢你。

2 个答案:

答案 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时,你的按钮不会被自动绘制

相关问题