Rysowanie przekątnych w oknie

0

Właśnie zaczyna poznawanie GUI i mam takie krótkie zadanie:
Narysować przekątne okna.

To mój kod:

import javax.swing.*;
import java.awt.*;

public class Przekatne extends JFrame {
	
	public Przekatne(){
		setSize(300, 300);
		setTitle("Okno");
 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 		setVisible(true); 
 		setLocationRelativeTo(null);
 		
 	}
 	
  public void paint(Graphics g) {
    	int w = getWidth();
    	int h = getHeight();
    	g.setColor(Color.blue);
 
 //drawLine(int x1, int y1, int x2, int y2)
 //Rysuje linię prostą pomiędzy punktami  (x1, y1) i (x2, y2) 
 
    g.drawLine(0, 0 , w, h);
    g.drawLine(0, h , w, 0);
 
 
  }

 	

		public static void main(String[]args){
		
		new Przekatne();
		
		}
	} 

O ile ramka jest kwadratem to jest prawie dobrze (przekątne na górze nieco nie dochodzą do wierzchołków). Ale jeśli zmienię na prostokąt to już to niedociągnięcie jest bardziej widoczne.

Także proszę o pomoc co zrobić by przekątne rysowane były poprawnie bez różnicy jaki kształt ma ramka. Oraz dlaczego w tym przypadku przekątne trafiają w dolne wierzchołki ale w górne już nie?
Z góry dziękuję za pomoc.

0
  1. w i h to rozmiary całego okna, łącznie z paskiem tytułowym i obramowaniem.
  2. Jeśli chcesz rysować, to dodaj do okna odpowiedni komponent, np. JPanel i w nim rysuj.
import javax.swing.*;
import java.awt.*;
 
public class Przekatne extends JFrame 
{ 
    public Przekatne()
    {
        setTitle("Okno");
        add(new Panelik());
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setVisible(true); 
        setLocationRelativeTo(null);
 
    }
    public static void main(String[]args)
    { 
        new Przekatne(); 
    }    
    class Panelik extends JPanel
    {
        public Panelik()
        {
            setPreferredSize(new Dimension(300,300));
        }
 
        public void paint(Graphics g) 
        {
            int w = getWidth();
            int h = getHeight();
            g.setColor(Color.blue);
 
            //drawLine(int x1, int y1, int x2, int y2)
            //Rysuje linię prostą pomiędzy punktami  (x1, y1) i (x2, y2) 
 
            g.drawLine(0, 0 , w, h);
            g.drawLine(0, h , w, 0); 
        }
    }
}
0

Bardzo dziękuję za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1