reakcja na wciśniecie JButton w drugim panelu

0

Jako nowy uczestnik Witam Wszyskich.
Mój problem polega natym że niepotrafie zaimplementować reakcji na wciśnięcie JButtona zawartego w JPanel1. Reakcja ta miła by powstać na drugim panelu w postaci wyrysowania jakiegoś krztałtu.

public class OknoGlowne extends JFrame{

OknoGlowne(){
    setSize(800,500);
    
    PanelRysunku panelRysunkuSciana=new PanelRysunku(panelPrzyciskow);
    PanelPrzyciskow panelPrzyciskow=new PanelPrzyciskow(panelRysunkuSciana);
    Container powZawartosci=getContentPane();
    powZawartosci.add(panelRysunkuSciana,BorderLayout.CENTER);
    powZawartosci.add(panelPrzyciskow,BorderLayout.SOUTH);
}

PanelRysunku panelRysunkuSciana;
PanelPrzyciskow panelPrzyciskow;
    

}
///////////////////////////////////////////////////////////
public class PanelPrzyciskow extends JPanel{
PanelPrzyciskow(PanelRysunku panRysSciana){
add(wspPunktuOsX);
add(wspPunktuOsY);
add(zatwierdz);
add(cofnij);
add(losowanie);
add(rysowanie);
setBackground(Color.green);
wspPunktuOsX.getDocument().addDocumentListener(sluchaczTF);
wspPunktuOsY.getDocument().addDocumentListener(sluchaczTF);
zatwierdz.addActionListener(sluchaczZatwierdz);
rysowanie.addActionListener(sluchaczRysowanie);
sciana=new ZbiorWierzcholkowPowierzchni();
panelRysunku=panRysSciana;
}

void zapiszParametryOdTextFielda(){
    try {
        szer = Double.parseDouble(wspPunktuOsX.getText().trim());
        wys = Double.parseDouble(wspPunktuOsY.getText().trim());
        //
    }
    catch (NumberFormatException w) { System.out.println("zapany wyjatek nie ma kompletu inf o wsp szer");   }
}
public ArrayList getZbiorWierzcholkowPowierzchni(){
    return sciana.getPoint2DArray();
}
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2=(Graphics2D)g;
    System.out.println("paintCOmponent przyciskow jest uruchomiony");
}

JTextField wspPunktuOsX=new JTextField(7);
JTextField wspPunktuOsY=new JTextField(7);
JButton zatwierdz=new JButton("zatwierdz");
JButton cofnij=new JButton("cofnij");
JButton losowanie=new JButton("losowanie");
JButton rysowanie=new JButton("rysowanie");
SluchaczJText sluchaczTF=new SluchaczJText();
SluchaczJBZatwierdz sluchaczZatwierdz=new SluchaczJBZatwierdz();
SluchaczJBRysownaie sluchaczRysowanie=new SluchaczJBRysownaie();
ZbiorWierzcholkowPowierzchni sciana;
double szer,wys;
PanelRysunku panelRysunku;
  
private class SluchaczJText implements DocumentListener{

    public void insertUpdate(DocumentEvent e) {zapiszParametryOdTextFielda();
    }
    public void removeUpdate(DocumentEvent e) {zapiszParametryOdTextFielda();
    }
    public void changedUpdate(DocumentEvent e) {throw new UnsupportedOperationException("Not supported yet.");
    }
}
private class SluchaczJBZatwierdz implements ActionListener{
    public void actionPerformed(ActionEvent e) {
       sciana.addPoint2D(szer, wys);
        for(int i=0;i<sciana.getSizeTabPunktow();i++){
           System.out.println("get point "+ sciana.getPoint2D(i));
        } 
    }
}
private class SluchaczJBRysownaie implements ActionListener{
    SluchaczJBRysownaie(){}
    public void actionPerformed(ActionEvent e) {
        //getZbiorWierzcholkowPowierzchni();
        System.out.println("rysowanie wlazone");
        panelRysunku.rysowanieSciany();
        //panelRysunku.repaint();
    }
}
private class SluchaczJBCofnij implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        
    }
}

}
//////////////////////////////////////////////
public class PanelRysunku extends JPanel {
PanelRysunku(PanelPrzyciskow panPrzyciskow){
setBackground(Color.WHITE);
panelPrzyciskow=panPrzyciskow;

}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2=(Graphics2D)g;
    System.out.println("paintCOmponent rysunku jest uruchomiony");
    
    
}
void rysowanieSciany(){
    //if(panelPrzyciskow.toString()){
        //iloscScian=panelPrzyciskow.sciana.getIloscScian();
        //for(int i=0;i<iloscScian;i++){
            //double x1=panelPrzyciskow.sciana.getPoint2D(i).getX();
            //double x2=panelPrzyciskow.sciana.getPoint2D(i+1).getX();
            //double y1=panelPrzyciskow.sciana.getPoint2D(i).getY();
            //double y2=panelPrzyciskow.sciana.getPoint2D(i+1).getY();
            //linia=new Line2D.Double(x1, y1,x2,y2);
        //}
        
    //}
      System.out.println("rysunku "+panelPrzyciskow.toString());  
        //rysowanieKrawędziSciany
    //ile jest scian
    //
}
private Line2D linia;
private int iloscScian=0;
private ArrayList wspWierzcholkow;
private PanelPrzyciskow panelPrzyciskow;

}
/////////////////////////////////////////
public class ZbiorWierzcholkowPowierzchni {
ZbiorWierzcholkowPowierzchni(){
tabPunktow=new ArrayList();
}
//interfejs do ArrayList tablicy Punktow
public void addPoint2D(double x,double y){
tabPunktow.add(new Point2D.Double(x,y));
}
public Point2D getPoint2D(int i){
return (Point2D) tabPunktow.get(i);
}
public ArrayList getPoint2DArray(){
return tabPunktow;
}
public void removePoint2D(){
tabPunktow.remove(tabPunktow.size());
}

public int getSizeTabPunktow(){
    return tabPunktow.size();
}
public int getIloscScian(){
    if(tabPunktow.size()>0){
        return tabPunktow.size()-1;
    }
    else return 0;
}
/*public getKrawedzSciana(int i){
    return
}*/
private ArrayList tabPunktow;

}
// jak na razie tojest niepotrzebne
class KrawedzSciany{
private Point2D tabKrawedziSciany[];
}
prosze o pomoc bo już bardzo długo się z tym męcze.
Dziękuję pozdrawiam

0

Poprawiłem trochę ten kod. Chodzi o to, żeby główne okno się chciało wyrysować (setVisible(true)). No i jeden panel ma teraz konstruktor bez parametru, ale za to referencja do drugiego jest ustawiana metodą panelRysunkuSciana.setPanelPrzyciskow(panelPrzyciskow);
Przycisk rysowanie w akcji wywołuje metodę tworzącą losowo tablicę punktów. Ostatecznie metoda paintComponent z klasy PanelRysunku odrysowuje linie. No a dalej to już zrób to tak jak chcesz :)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class OknoGlowne extends JFrame{
   public static void main(String[] args){
	   OknoGlowne okno = new OknoGlowne();
	   okno.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	   okno.setVisible(true);
   }
    OknoGlowne(){
        setSize(800,500);
       
        PanelRysunku panelRysunkuSciana=new PanelRysunku();
        PanelPrzyciskow panelPrzyciskow=new PanelPrzyciskow(panelRysunkuSciana);
        panelRysunkuSciana.setPanelPrzyciskow(panelPrzyciskow);
        Container powZawartosci=getContentPane();
        powZawartosci.add(panelRysunkuSciana,BorderLayout.CENTER);
        powZawartosci.add(panelPrzyciskow,BorderLayout.SOUTH);
    }
   
    PanelRysunku panelRysunkuSciana;
//    PanelPrzyciskow panelPrzyciskow;
       
}
///////////////////////////////////////////////////////////
class PanelPrzyciskow extends JPanel{
    PanelPrzyciskow(PanelRysunku panRysSciana){
        add(wspPunktuOsX);
        add(wspPunktuOsY);
        add(zatwierdz);
        add(cofnij);
        add(losowanie);
        add(rysowanie);
        setBackground(Color.green);
        wspPunktuOsX.getDocument().addDocumentListener(sluchaczTF);
        wspPunktuOsY.getDocument().addDocumentListener(sluchaczTF);
        zatwierdz.addActionListener(sluchaczZatwierdz);
        rysowanie.addActionListener(sluchaczRysowanie);
        sciana=new ZbiorWierzcholkowPowierzchni();
        panelRysunku=panRysSciana;
    }
   
    void zapiszParametryOdTextFielda(){
        try {
            szer = Double.parseDouble(wspPunktuOsX.getText().trim());
            wys = Double.parseDouble(wspPunktuOsY.getText().trim());
            //
        }
        catch (NumberFormatException w) { System.out.println("zapany wyjatek nie ma kompletu inf o wsp szer");   }
    }
    public ArrayList getZbiorWierzcholkowPowierzchni(){
        return sciana.getPoint2DArray();
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g;
        System.out.println("paintCOmponent przyciskow jest uruchomiony");
    }
   
    JTextField wspPunktuOsX=new JTextField(7);
    JTextField wspPunktuOsY=new JTextField(7);
    JButton zatwierdz=new JButton("zatwierdz");
    JButton cofnij=new JButton("cofnij");
    JButton losowanie=new JButton("losowanie");
    JButton rysowanie=new JButton("rysowanie");
    SluchaczJText sluchaczTF=new SluchaczJText();
    SluchaczJBZatwierdz sluchaczZatwierdz=new SluchaczJBZatwierdz();
    SluchaczJBRysownaie sluchaczRysowanie=new SluchaczJBRysownaie();
    ZbiorWierzcholkowPowierzchni sciana;
    double szer,wys;
    PanelRysunku panelRysunku;
     
    private class SluchaczJText implements DocumentListener{

        public void insertUpdate(DocumentEvent e) {zapiszParametryOdTextFielda();
        }
        public void removeUpdate(DocumentEvent e) {zapiszParametryOdTextFielda();
        }
        public void changedUpdate(DocumentEvent e) {throw new UnsupportedOperationException("Not supported yet.");
        }
    }
    private class SluchaczJBZatwierdz implements ActionListener{
        public void actionPerformed(ActionEvent e) {
           sciana.addPoint2D(szer, wys);
            for(int i=0;i<sciana.getSizeTabPunktow();i++){
               System.out.println("get point "+ sciana.getPoint2D(i));
            }
        }
    }
    private class SluchaczJBRysownaie implements ActionListener{
        SluchaczJBRysownaie(){}
        public void actionPerformed(ActionEvent e) {
            //getZbiorWierzcholkowPowierzchni();
            System.out.println("rysowanie wlazone");
            panelRysunku.randomLines();
//            panelRysunku.rysowanieSciany();
            panelRysunku.repaint();
        }
    }
    private class SluchaczJBCofnij implements ActionListener{
        public void actionPerformed(ActionEvent e) {
           
        }
    }
}
//////////////////////////////////////////////
class PanelRysunku extends JPanel {
	Random rand=new Random();
    PanelRysunku(){
        setBackground(Color.WHITE);
//        panelPrzyciskow=panPrzyciskow;
       
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g;
        System.out.println("paintCOmponent rysunku jest uruchomiony");    
        if(pointArray==null){
			return;
		}
		int n = pointArray.length;
		for(int i=0; i<n; i++){
		g.drawLine(pointArray[i].x, pointArray[i].y, pointArray[(i+1)%n].x, pointArray[(i+1)%n].y);
		}
    }
    Point pointArray[];
    public void randomLines(){
    	int n = rand.nextInt(8)+3;
    	pointArray=new Point[n];
    	for(int i=0; i<n; i++){
    		pointArray[i]=new Point(rand.nextInt(200), rand.nextInt(200));
    	}
    }
    
//   

	void rysowanieSciany(){
        if(panelPrzyciskow!=null){
            iloscScian=panelPrzyciskow.sciana.getIloscScian();
            for(int i=0;i<iloscScian;i++){
                double x1=panelPrzyciskow.sciana.getPoint2D(i).getX();
                double x2=panelPrzyciskow.sciana.getPoint2D(i+1).getX();
                double y1=panelPrzyciskow.sciana.getPoint2D(i).getY();
                double y2=panelPrzyciskow.sciana.getPoint2D(i+1).getY();
                linia=new Line2D.Double(x1, y1,x2,y2);
            }
           
        }
          System.out.println("rysunku "+panelPrzyciskow.toString());  
            //rysowanieKrawędziSciany
        //ile jest scian
        //
    }
    private Line2D linia;
    private int iloscScian=0;
    private ArrayList wspWierzcholkow;
    private PanelPrzyciskow panelPrzyciskow;
	public void setPanelPrzyciskow(PanelPrzyciskow panelPrzyciskow) {
		this.panelPrzyciskow = panelPrzyciskow;
	}
}
/////////////////////////////////////////
class ZbiorWierzcholkowPowierzchni {
    ZbiorWierzcholkowPowierzchni(){
        tabPunktow=new ArrayList();
    }
    //interfejs do ArrayList tablicy Punktow
    public void addPoint2D(double x,double y){
        tabPunktow.add(new Point2D.Double(x,y));
    }
    public Point2D getPoint2D(int i){
        return (Point2D) tabPunktow.get(i);
    }
    public ArrayList getPoint2DArray(){
        return tabPunktow;
    }
    public void removePoint2D(){
        tabPunktow.remove(tabPunktow.size());
    }
   
    public int getSizeTabPunktow(){
        return tabPunktow.size();
    }
    public int getIloscScian(){
        if(tabPunktow.size()>0){
            return tabPunktow.size()-1;
        }
        else return 0;
    }
    /*public getKrawedzSciana(int i){
        return
    }*/
    private ArrayList tabPunktow;
}
// jak narazie tojest niepotrzebne
class KrawedzSciany{
    private Point2D tabKrawedziSciany[];
}
0

Serdecznie dziekuję, bądź pozdrowiony :-)

0

Witam!
Mam podstawowy problem.
Co dokładnie (krok po kroku) trzeba zrobić w Netbeasie, żeby po przyciśnięciu JButton wyświetliły się na panelu o rozmiarach 120x120 dwa koła współśrodkowe?
Będę bardzo wdzięczna za pomoc!

0

"Krok po kroku"?
Sorry, ale to nie jest strona "zróbcie moje zadanie / projekt".
Tak w najprostszym ujęciu to:
a) musisz mieć gdzie rysować, toteż polecam stworzyć własną klasę, dziedziczącą po JPanel
b) Dodać metodę "drawCircles(int posX, int posY)
c) Przy naciśnięciu przycisku należy ją po prostu wywoływać

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