Kilka paneli w ramce i rysowanie na nich.

Kilka paneli w ramce i rysowanie na nich.
R9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
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.

Kopiuj
 
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.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
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)
R9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
0

Stworzyłem coś takiego:

Kopiuj
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?

Kopiuj
 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.