Как нарисовать пунктирную линию на белом фоне в JLabel? - Java

Узнай цену своей работы

Формулировка задачи:

Хочу нарисовать пунктирную линию в JPanel. Однако рисовать прямо на JPanel не советуют (Кстати почему?). Говорят лучше на JPanel кинуть JLabel c нарисованным BufferedImage. Я попытался:
Листинг программы
  1. public class MainFrame extends JFrame {
  2. ... // метод main и т.п.
  3. public MainFrame() {
  4. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  5. setBounds(100, 100, 800, 800);
  6. contentPane = new JPanel();
  7. contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  8. setContentPane(contentPane);
  9. contentPane.setLayout(null);
  10. JPanel menuPanel = new JPanel();
  11. menuPanel.setBackground(Color.LIGHT_GRAY);
  12. menuPanel.setBounds(10, 11, 250, 751);
  13. contentPane.add(menuPanel);
  14. JPanel gamePanel = new JPanel();
  15. gamePanel.setBackground(Color.WHITE);
  16. gamePanel.setBounds(270, 11, 512, 751);
  17. contentPane.add(gamePanel);
  18. gamePanel.setLayout(null);
  19.  
  20. ImageIcon img = new ImageIcon(getImage());
  21. JLabel label = new JLabel(img);
  22. label.setForeground(Color.WHITE);
  23. label.setBounds(0, 0, 512, 751);
  24. gamePanel.add(label);
  25. }
  26. public BufferedImage getImage(){
  27. BufferedImage bi = new BufferedImage(gamePanel.getWidth(), gamePanel.getHeight() , BufferedImage.TYPE_INT_RGB);
  28. Graphics2D g2 = bi.createGraphics();
  29. g2.setColor(Color.red);
  30. float[] dashl = {5,5};
  31. BasicStroke pen = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,10,dashl,0);
  32. g2.setStroke(pen);
  33. g2.drawLine(0, 0, gamePanel.getWidth(), gamePanel.getHeight());
  34. return bi;
  35. }
  36. }
В итоге получилось вот это(см. рисунок.jpg) на черном фоне/ Как сделать чтобы пунктирная линия была на белом фоне?

Решение задачи: «Как нарисовать пунктирную линию на белом фоне в JLabel?»

textual
Листинг программы
  1. public class ImageLabel extends JLabel {
  2.  
  3.     private int width, height;
  4.    
  5.     public ImageLabel(int width, int height){
  6.         super("label");
  7.         this.width = width;
  8.         this.height = height;
  9.     }
  10.    
  11.     @Override
  12.     public void paint(Graphics g) {
  13.         super.paint(g);
  14.         Graphics2D f = (Graphics2D) g;
  15.         f.setStroke(new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{10f, 5f}, 0f));
  16.         f.setColor(Color.RED);
  17.         f.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  18.         f.drawLine(0, 0, 200, 300);
  19.     }
  20. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы