我有这段代码:
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的输入决定的。
答案 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教程中的部分,了解更多信息和工作示例。