public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(5));
g2.drawLine(4,4,95,95);
g2.drawLine(4,95,95,4);
g2.setStroke(new BasicStroke(1));
}
Когда вы делаете пользовательскую живопись, вам нужно вызвать
super.paintComponent(g);
в качестве первого утверждения в методе, обеспечивающего очистку фона, в противном случае артефакты рисования можно оставить.
Конечно, если вы сделаете это, вы получите изображение по умолчанию для JButton. Так, может быть, вам нужно расширить JComponent для вашей пользовательской картины?
Кроме того, не вызывайте repaint () в конструкторе вашего класса:
- ничего не делает, потому что компонент не был добавлен в видимую рамку
- Swing определит, когда необходимо перекрасить компонент, поэтому вы редко будете вызывать этот метод, если вы не делаете что-то вроде анимации и вам не нужен компонент для перекраски.
Edit:
Похоже, вы просто пытаетесь нарисовать "X" на кнопке. Вы действительно не должны расширять JButton для чего-то подобного. Вы должны расширять компонент только при добавлении новых функций.
A JButton
уже поддерживает отображение Icon
, так что вы действительно хотите просто создать Icon
, который вы можете использовать на кнопке:
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi.createGraphics();
g2.setColor( Color.BLACK );
g2.setStroke(new BasicStroke(5));
g2.drawLine(4,4,95,95);
g2.drawLine(4,95,95,4);
ImageIcon icon = new ImageIcon( bi );
Теперь Icon можно использовать на любом компоненте, который поддерживает отображение Icon:
JButton button = new JButton( icon );
button.setFocusPainted( false );
button.setBorder( null );