Kilka paneli w ramce i rysowanie na nich.

0

Witam. Chcę napisać program, który tworzy ramkę i dodaje do niej kilka paneli. Na jednym panelu przykładowo ma być wyświetlany tekst, na innym jakaś figura (przyjmijmy, że rectangle).

Problem pojawił się przy próbie rysowania prostokąta na panelu.

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

public class Zad12_2a extends JFrame{ 

        public void paint(Graphics g) {
            g.setColor(Color.red);
            g.fillRect(20, 20, 20, 10);
        }
    
        
	JLabel tekst = new JLabel("Jakis tekst");
	JPanel panel = new JPanel();
        JPanel panel2 = new JPanel();

	public Zad12_2a(){
		super("Tytuł na belce okna");
		/* ----- Panel wyswietlajacy tekst ----- */
                panel.add(tekst);
                panel.setSize(600,200);
                panel.setLocation(0,0);
                panel.setBackground(Color.red);
                
                
                /* ----- Panel rysujący prostokąt ----- */
                panel2.setSize(600,200);
                panel2.setLocation(0,200);
                panel2.setBackground(Color.green);
                
                
		/* ----- Ustawienia ramki ----- */
                setSize(600,300); 	
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                add(panel);
                add(panel2);
                setVisible(true);
	} 

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

Prosiłbym o wskaówki jak poradzić sobie z rysowaniem figur na panelu.

0
  1. panel2 powinien być typu MojPanel (nazwa może być inna :)) extends JPanel, metodę paint przenieś do klasy MojPanel
  2. domyślnym menadżerem rozkładu dla JFrame jest BorderLayout, on wymaga dwuargumentowej metody add(komponent, gdzieUmieścić), domyślnie komponenty są umieszczane w centrum => widać tylko ostatnio umieszczony (u Ciebie panel2)
0

Stworzyłem coś takiego:

package zad12_2a;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Zad12_2a extends JFrame { 
        
	JLabel tekst = new JLabel("Jakis tekst");
	JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel(){
            public void paint(Graphics g) {
                super.paint(g);
                g.setColor(Color.red);
                g.drawRect(275,20,50,50);
            }
        };
        JPanel panel3 = new JPanel();
        
       
    
       

	public Zad12_2a(){
		super("Tytuł na belce okna");
		/* ----- Panel wyswietlajacy tekst ----- */
                panel1.add(tekst);
                panel1.setSize(600,100);
                panel1.setLocation(0,0);
                panel1.setBackground(Color.red);
                
                
                /* ----- Panel rysujący prostokąt ----- */
                panel2.setSize(600,100);
                panel2.setLocation(0,100);
                panel2.setBackground(Color.green);
                
                /* ----- Panel trzeci ----- */
                
                panel3.setSize(600,100);
                panel3.setLocation(0,200);
                panel3.setBackground(Color.blue);

                
                
		/* ----- Ustawienia ramki ----- */
                setSize(600,300); 	
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                add(panel1);
                add(panel2);
                add(panel3);
                setVisible(true);
	} 

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

Czy takie rozwiązanie nie jest poprawne do końca?

 

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