Редактировать 4: Новое форматирование вопроса
. ПРЕДПОСЫЛКИ: У меня есть класс Window, который расширяет JFrame. В JFrame у меня есть холст.На холст я добавляю нестандартные объекты.Единственная цель этого объекта (ради аргументации) - напечатать круг с текстом на холсте.Вы можете добавить несколько таких пользовательских компонентов на холст.Когда вы добавляете новый пользовательский компонент, он помещается на 20 пикселей (на данный момент) от предыдущего компонента, добавленного на холст.
ПРОБЛЕМА: холст помещает второй круг в положение, позволяющее назвать его A, Aприблизительно в центре формы. Третий добавленный круг помещается в позицию B, B находится полностью справа от холста, когда добавляется больше кругов, обе позиции A и B сдвигаются влево.Это происходит независимо от того, что я указываю в качестве координат x и y функции drawOval в методе рисования.
ВОПРОС: Есть ли параметр / функция / параметр, относящийся к объектам, которые вы рисуете, например, Canvas и JFrame, которыепоместит нарисованные к нему объекты в заданные позиции вместо того, где указано рисовать
#
Все, что было опубликовано до edit4:
Имеет ли холст в Java какие-то настройки, которые я могу отключитьчто заставляет его размещать элементы там, где он хочет.
public void paint(Graphics g){
System.out.println("paint X: "+x+" Y: "+y);
g.drawOval(x, y, RAD , RAD);
System.out.println("paint 2nd X: "+x+" Y: "+y);
}
Следующий код не помещает два круга в одну и ту же позицию, когда x и y жестко закодированы, а .out доказывает, что x, y не меняются, поэтому я в растерянности. (когда два разных объекта вызывают свою функцию рисования каждый после того, как первый находится в предопределенных позициях, но не там, где я его указываю)
Редактировать: я сделалJAR-файл, который вы можете проверить, чтобы понять, что я имею в виду, если вы добавляете новый узел, он должен быть только на расстоянии 60 пикселей от предыдущего, и с постоянной позиция.Его можно найти здесь
Edit2: Я действительно не знаю, какой код вам может понадобиться, у меня действительно много кода.Как объяснено до того, как у меня есть JFrame, на Jframe есть холст, чтобы прояснить больше, у меня есть объекты, которые расширяют компонент, каждый из которых использует приведенный выше фрагмент кода в качестве краски (который, насколько я понимаю, вызывается, когда repaint вызывается на холсте) если вы посмотрите на пример, вы можете нажать кнопку «Добавить узел», первый объект (узел) будет помещен в 0,0, что правильно, второй добавленный узел должен быть помещен в 60 пикселях справа от предыдущего добавленного узла,но второй, который вы добавляете, всегда помещается в центре холста, независимо от того, каковы координаты этого второго элемента, даже если я жестко их кодирую.Если вы щелкнете правой кнопкой мыши, вы также можете добавить новый узел, и этот узел должен быть размещен там, где вы щелкнули правой кнопкой мыши, но также будет добавлен в случайную позицию на холсте, который я проверил, и дважды проверьте координаты, которые получает функция, чтобы ничего не случилосьмои координаты, вот почему в стартовой строке моего вопроса спрашивается, как расположить Предметы, где я их рисую, а не там, где холст хочет их разместить.
Edit3: в действительности мой вопрос все еще неясен, есливы можете посмотреть jar, и у вас установлена java, вы можете запустить jar с помощью следующей команды, предполагая, что jar находится в вашем текущем каталоге в командной строке C: \ Program Files \ Java \ jre1.6.0_04 \ bin \ java.exe-jar Projek.jar, а для Linux просто java -jar Projek.jar.Хорошо, для других фрагментов кода.
В классе Window
public class Window extends JFrame implements ActionListener{
...
Canvas panel;
...
private int globalX;
private int globalY;
...
public Window(){
...
graph=new Graph();
panel = new Canvas();
panel.setLayout(new GridLayout(1, 2));
...
container.add(panel);
container.add(btn_newNode,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setSize(1024,758);
this.setVisible(true);
}
//Add Node gets called when you click on the button
public void addNode(String name){
int ix;
int iy;
String itext=name;
if(name.compareTo(".print") != 0){
if(graph.VertexCount() > 0){
Vertex temp=graph.getVertex(graph.VertexCount());
if((temp.x + 20) < panel.getWidth() ){
ix=temp.x + 20;
iy=temp.y;
}
else{
ix=temp.x;
iy=temp.y + 20;
}
} else {
ix=0;
iy=0;
}
Vertex a=new Vertex(itext,ix,iy);
graph.addVertex(a);
panel.add(a);
panel.revalidate();
} else System.out.println(graph.toString());
}
public class Vertex<T> extends Component {
private T data;
public int x;
public int y;
public final int RAD=50;
public Vertex( T data,int _x,int _y) {
incomingEdges = new ArrayList<Edge<T>>();
outgoingEdges = new ArrayList<Edge<T>>();
visited = false;
this.data = data;
x=_x;
y=_y;
System.out.println("X: "+x+" Y: "+y);
}
public void paint(Graphics g){
System.out.println("paint X: "+x+" Y: "+y);
g.drawString(data.toString(), x+4, y+27);
g.drawOval(x, y, RAD , RAD);
//g.drawOval(20, 0, RAD , RAD);
System.out.println("paint 2nd X: "+x+" Y: "+y);
}
Это все, что я могу считать относящимся к делу, но я ошибался до ^ ^ 1029 *