Я не совсем уверен, что вы спрашиваете. Обычно вы помещаете все функции рисования в метод paint (). Тем не менее, вы, как правило, хотите, чтобы любая длительная работа не выполнялась в потоке диспетчеризации AWT, который является тем же потоком, в котором вызывается метод actionPerformed () ваших кнопок. Чтобы обеспечить отзывчивость вашей программы, вы можете передать ее SwingWorker.
Если ваше приложение не показывается, скорее всего, вы не вызывали pack () и show () (в таком порядке) во время инициализации JPanel. Как правило, вы должны сделать это как последнюю вещь в вашем методе init (). Последующее добавление компонентов или изменение состояния компонентов в любом месте, кроме потока AWT, после этого может привести к тому, что AWT рассердится на вас и выдаст исключение.
Если вы спрашиваете, как нарисовать сами точки, вы должны взглянуть на Graphics.drawPolyline () и связанные методы, которые вы должны вызывать из вашего метода paint ().
Если вы спрашиваете, как нарисовать их из обработчика кнопок, вы этого не сделаете. Вы вызываете repaint () и позволяете объекту перекрашиваться самостоятельно. Кроме того, в вашем случае, я бы не стал беспокоиться о субклассе JButton. Просто внедрите actionListener. В методе init () просто создайте две кнопки и зарегистрируйте слушателей с ними. Это также означает, что вам не нужно переопределять их конструкторы.
Кроме того, вы маскируете submit во время вашего метода init (): на него никогда не ссылаются и он не является bpanel. Кроме того, я бы использовал отдельный массив X и Y, а не пытался объединить их в одну матрицу. Вам не нужно объявлять матрицу общедоступной, поскольку внутренние классы уже могут ее видеть. Фактически, вы можете (и, вероятно, должны) объявить все поля закрытыми. У вас также слишком много магических чисел, и вы слишком много сражаетесь с Swing: просто дайте ему выполнить свою работу, раскладывая все свои вещи. Вам также следует попытаться показать наименьшую возможную проблему, которая позволит нам ответить на вашу проблему: этот вид течет повсюду и за ним трудно следовать.
Да, и настоящая причина, по которой ваши линии не прорисовываются: вы вызываете repaint на вашем JPanel, а не на JFrame, на котором хотите рисовать. Если вы просто вызываете repaint () вместо points.repaint (), JFrame позаботится о рисовании себя и всех своих потомков.