Я хотел бы нарисовать линию между двумя координатами xy с помощью перетаскивания мышью, но не могу получить ничего для рисования
это приложение с графическим интерфейсом, использующее Swing и AWT, в настоящее время у меня есть журнал мыши, чтобы записать начальную и конечную позиции xy, используя события мыши, которые хранятся в массиве как [x1,y1,x2,y2]
, однако не может провести линию между ними.
Drawline - это собственная функция, вызываемая в главную
редактирование:
скажем, у меня есть 2 класса;
public class mainApp extends JFrame implements ActionListener, Runnable {
private JPanel jpanel = new JPanel();
private mainApp(String title) throws HeadlessException {
super(title);
}
private void createGUI() {
// TODO
// ...
// cannot call unless is static
drawStraightLine.drawLine(jpanel);
this.pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {}
@Override
public void run() {createGUI();}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new mainApp("drawline"));
}
}
public class drawStraightLine extends JPanel {
public static void drawLine(JPanel jpanel) {
// content which conceivably works
// mouselisteners and repaint()
public void paintComponent (Graphics g){
super.paintComponent(g);
if (check != null) {
Color purple = new Color(128, 0, 128);
g.setColor(purple);
g.drawLine(x1, y1, x2, y2);
}
}
}
Я не могу вызвать drawline (jpanel), если она не является статической функцией, но из-за ее статического состояния слушатели мыши и перерисовки становятся недействительными.
, пока Graphics g находится внутри функции, а не непосредственно в классе, он станет недопустимым символом (игнорируя значения check и xy в качестве заполнителей)