使用Java中的x和y textField设置图形的位置

时间:2016-09-26 08:12:06

标签: java swing

我有这段代码:

package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame implements ActionListener {

    private JPanel panel;
    private JButton button;
        private JTextField field,field2;       
        private JLabel labelx, labely; 

    public static void main(String[] args) {
        Test Frame = new Test();
        Frame.setSize(400, 400);
        Frame.createGUI();
        Frame.setVisible(true);
    }

    private void createGUI(){
        setDefaultCloseOperation (EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());

        panel = new JPanel();       
        panel.setPreferredSize(new Dimension(300, 300));
        panel.setBackground(Color.white);
        window.add(panel);

        button = new JButton(); 
        button.setText("Teken water molecuul");
        button.setBackground(Color.yellow);
        button.addActionListener(this);     
        window.add(button);

                labelx = new JLabel("x");       
                field = new JTextField(2);
                labely = new JLabel("y"); 
                field2 = new JTextField(2);
                window.add(labelx);
                window.add(field);
                window.add(labely);
                window.add(field2);
    }

    @Override
    public void actionPerformed(ActionEvent e) {       
        Graphics paper = panel.getGraphics();
                String x = field.getText();
                String y = field2.getText();
                //panel.setLocation(x,y);                //this x and y don't work
                paper.setColor(Color.blue);
                paper.fillOval(50,50,50,50);
                paper.fillOval(50,200,50,50);
                paper.setColor(Color.black);
                paper.drawLine(92,92,150,150);
                paper.drawLine(92,207,150,150);
                paper.setColor(Color.red);
                paper.fillOval(100,100,100,100);

    }
}

我想将图形的位置设置为使用两个textFields获得的特定X和Y坐标。如果我将x和y手动更改为数字,则白色屏幕会移动。我不想移动白色屏幕,只想移动图形。

因此,两个textFields的输入应确定图形的位置。

我现在运行代码的结果。该位置不是由文本textFields的输入决定的。

http://i.stack.imgur.com/Bia0w.png

1 个答案:

答案 0 :(得分:0)

自定义绘画是通过覆盖面板的paintComponent(...)方法完成的,而不是使用getGraphics()方法。

所以你需要创建一个自定义类。这个类有两个实例变量来控制x / y位置。然后绘画代码将引用这些变量。您还需要添加setter方法来更改这些变量的值。

基本代码如下:

public class CustomPainting extends JPanel
{
    private int locationX;
    private int locationY;

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.translate(locationX, locationY)

        //  add your painting code here
    }

    public setGraphicLocation(int locationX, int locationY)
    {
        this.locationX = locationX;
        this.locationY = locationY;
        repaint;
    }
}

然后在ActionListener代码中,您需要使用文本字段中的值调用自定义类的setGraphicLocation()方法。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。