rapaint();在绘制

时间:2015-09-16 11:09:08

标签: java swing

我刚刚开始使用JAVA,我正在尝试使用输入绘制图像。 我希望在给出新值并单击按钮“draw”时,面板会“刷新/重新加载”。 我尝试了所有不同的removeALL()方式;重绘(); revalidate();在不同的地方。

使用removeAll();窗户冻结了。 只有repaint();和revalidate();图像只停留一秒钟。

我希望图片保持不变,直到新的值为givin并单击该按钮。 她是代码的一部分。 谢谢。

public void actionPerformed (ActionEvent event) {
    Graphics paper = panel.getGraphics();

    String input = field.getText();
    String input2 =field2.getText(); 
    int x = Integer.parseInt(input);
    int y = Integer.parseInt(input2);

    paper.setColor(Color.red);
    paper.fillOval(x, y, 50, 50);

    paper.setColor(Color.blue);
    paper.fillOval((x+100), y, 35, 35);

    paper.setColor(Color.blue);
    paper.fillOval(x, (y+100), 35, 35);

    paper.setColor(Color.black);
    paper.drawLine((x+49), (y+25), (x+102), (y+20));

    paper.setColor(Color.black);
    paper.drawLine((x+25), (y+49), (x+20), (y+102));

    //removeAll();
    //revalidate();
    //repaint();
}

我尝试了不同的功能:

public void actionPerformed (ActionEvent event) {
    Graphics paper = panel.getGraphics();
    function(paper);
    repaint();
    revalidate();
}

public void function (Graphics paper){
.... } 

无法正常工作..

1 个答案:

答案 0 :(得分:3)

不要调用panel.getGraphics()从重写的paintComponents方法中获取它。像这样:

public class MyJFrame extends JFrame {

    final JTextField field;
    final JTextField field2;
    final JButton btn;
    final MyJPanel panel;

    public MyJFrame() {
        setLayout(new FlowLayout());
        field = new JTextField("10");
        add(field);
        field2 = new JTextField("10");
        add(field2);
        btn = new JButton("paint");
        add(btn);
        panel = new MyJPanel();
        panel.setPreferredSize(new Dimension(200, 200));
        add(panel);
        btn.addActionListener(e -> {
            panel.repaint();
        });
        pack();
    }

    class MyJPanel extends JPanel {

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics paper = g;
            String input = field.getText();
            String input2 = field2.getText();
            int x = Integer.parseInt(input);
            int y = Integer.parseInt(input2);

            paper.setColor(Color.red);
            paper.fillOval(x, y, 50, 50);

            paper.setColor(Color.blue);
            paper.fillOval((x + 100), y, 35, 35);

            paper.setColor(Color.blue);
            paper.fillOval(x, (y + 100), 35, 35);

            paper.setColor(Color.black);
            paper.drawLine((x + 49), (y + 25), (x + 102), (y + 20));

            paper.setColor(Color.black);
            paper.drawLine((x + 25), (y + 49), (x + 20), (y + 102));
        }

    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(() -> {
            new MyJFrame().setVisible(true);
        });
    }
}