通过另一个面板中的按钮按钮动态添加按钮到一个面板

时间:2011-11-18 07:20:01

标签: java swing graphics

我有一个框架,我在其上创建了一个主面板。

在那个面板上还有2个面板。我想要的是,我在panel1上有按钮,现在,一旦我点击按钮,我想在第二个面板上绘制一个2d对象。

我尝试了很多东西,但这是徒劳的。请帮助我。在这种情况下。任何帮助将不胜感激。 谢谢,

    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionListener;
    import javax.swing.border.Border;

    public class iframe extends JFrame implements ActionListener{
    public JPanel jp0=new JPanel(new GridLayout());
    public JPanel jp1=new JPanel(new GridLayout(1,3));
    myclass my=new myclass(100,200,300,400,500,600,700,900,800,10000,3000,600);
    public JPanel jp2=new JPanel(new BorderLayout());

    @SuppressWarnings("ResultOfObjectAllocationIgnored")
    public static void main(String args[])
    {
       iframe f=new iframe();   
    }
    public iframe(myclass my)
    {
        this.my=my; 
        Border border = BorderFactory.createTitledBorder("bordersarehers")  ;
        jp1.setBorder(border);

        JButton button1=new JButton(); 
        ImageIcon img1=new ImageIcon("","b1");
        button1=new JButton(img1);
        button1.addActionListener(this);
        jp1.add(button1);

        JButton button2=new JButton(); 
        ImageIcon img2=new ImageIcon("","b1");
        button2=new JButton(img2);
        jp1.add(button2);

        JButton button3=new JButton(); 
        ImageIcon img3=new ImageIcon("","b1");
        button3=new JButton(img3);
        jp1.add(button3);

        Border border2 = BorderFactory.createTitledBorder("");
        jp2.setBorder(border2);

        jp0.add(jp1);
        jp0.add(jp2);
        jp2.add(my);
        this.add(jp0);
        this.add(jp2);
        this.add(jp1,BorderLayout.EAST);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.setVisible(true);
 }
    @Override
    public void actionPerformed(ActionEvent e) 
    {
         if(e.getSource()=="b1")
         {

         }
    }
}


class myclass extends JPanel
{
    int a,b,c,d,e,f,g1,h,i,j,k,l;
    myclass(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int x5,int y5,int x6,int y6)
    {
        a=x1;
        b=y1;

        c=x2;
        d=y2;

        e=x3;
        f=y3;

        g1=x4;
        h=y4;

        i=x5;
        j=y5;

        k=x6;
        l=y6;
    }
    public void drawpoly()
    {
        repaint();
    }
    public void paintComponent(Graphics g)
    {
        int xcoord[]=new int[]{a,c,e,g1,i,k};
    int ycoord[]=new int[]{b,d,f,h,j,l};
        g.drawPolygon(xcoord,ycoord,6);
    }
}

2 个答案:

答案 0 :(得分:1)

查看Swing Action

您可以向按钮添加操作并将面板作为参数传递

答案 1 :(得分:1)

这段代码中有很多疯狂的东西。我想这是你想做的事情:

import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.border.Border;

public class Iframe extends JFrame implements ActionListener {
    public JPanel jp0 = new JPanel( new GridLayout() );
    public JPanel jp1 = new JPanel( new GridLayout( 1, 3 ) );
    public JPanel jp2 = new JPanel( new BorderLayout() );
    Myclass       my  = new Myclass( 100, 200, 300, 400, 500, 600, 700, 900, 800, 10000, 3000, 600 );

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

    public Iframe() {
        Border border = BorderFactory.createTitledBorder( "Pentahexes" );
        jp1.setBorder( border );

        ImageIcon Pentaheximg1 = new ImageIcon( "E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex1.jpg", "b1" );
        JButton Pentahexbutton1 = new JButton( Pentaheximg1 );
        Pentahexbutton1.addActionListener( this );
        Pentahexbutton1.setName( "b1" );
        jp1.add( Pentahexbutton1 );

        ImageIcon Pentaheximg2 = new ImageIcon( "E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex2.jpg", "b1" );
        JButton Pentahexbutton2 = new JButton( Pentaheximg2 );
        Pentahexbutton2.addActionListener( this );
        Pentahexbutton2.setName( "b2" );
        jp1.add( Pentahexbutton2 );

        ImageIcon Pentaheximg3 = new ImageIcon( "E:/NetBeans/Pentahex-Game/src/pentahex/game/Pentahex3.jpg", "b1" );
        JButton Pentahexbutton3 = new JButton( Pentaheximg3 );
        Pentahexbutton3.addActionListener( this );
        Pentahexbutton3.setName( "b3" );
        jp1.add( Pentahexbutton3 );

        Border border2 = BorderFactory.createTitledBorder( "Puzzle" );
        jp2.setBorder( border2 );

        jp0.add( jp1 );
        jp0.add( jp2 );
        jp2.add( my );
        this.add( jp0 );
        this.add( jp2 );
        this.add( jp1, BorderLayout.EAST );
        this.setExtendedState( JFrame.MAXIMIZED_BOTH );
        this.setVisible( true );
    }

    @Override
    public void actionPerformed( ActionEvent e ) {
        if( "b1".equals( ((JButton)e.getSource()).getName() ) ) {
            my.setData( 100, 200, 300, 400, 500, 600, 700, 900, 800, 10000, 3000, 600 );
        }
        if( "b2".equals( ((JButton)e.getSource()).getName() ) ) {
            my.setData( 10, 20, 30, 400, 50, 60, 70, 80, 90, 100, 110, 120 );
        }
        if( "b3".equals( ((JButton)e.getSource()).getName() ) ) {
            my.setData( 10, 30, 45, 400, 60, 75, 90, 80, 90, 1000, 3010, 120 );
        }
        my.drawpoly();
    }
}

class Myclass extends JPanel {
    int a, b, c, d, e, f, g1, h, i, j, k, l;

    Myclass( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x5, int y5, int x6, int y6 ) {
        setData( x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6 );
    }

    public void setData( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x5, int y5, int x6, int y6 ) {
        a = x1;
        b = y1;

        c = x2;
        d = y2;

        e = x3;
        f = y3;

        g1 = x4;
        h = y4;

        i = x5;
        j = y5;

        k = x6;
        l = y6;
    }

    public void drawpoly() {
        invalidate();
        repaint();
    }

    @Override
    public void paintComponent( Graphics g ) {
        super.paintComponent( g );
        int xcoordinatesofthehexagon[] = new int[] { a, c, e, g1, i, k };
        int ycoordinatesofthehexagon[] = new int[] { b, d, f, h, j, l };
        g.drawPolygon( xcoordinatesofthehexagon, ycoordinatesofthehexagon, 6 );
    }
}

<强>更新

import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map.Entry;

import javax.swing.border.Border;

public class Iframe extends JFrame implements ActionListener {

    private static final String PATH = "E:/NetBeans/Pentahex-Game/src/pentahex/game/";

    HashMap<String, int[]> pentahexMap = new HashMap<String, int[]>() {{

        put( "Clear",     new int[]{ 0,0,0,0,0,0,0,0,0,0,0,0 } );
        put( "Pentahex1", new int[]{ 0,0,0,50,50,50,25,25,50,0,0,0 } );
        put( "Pentahex2", new int[]{ 100,100,100,150,150,150,125,125,150,100,100,100 } );
        put( "Pentahex3", new int[]{ 10, 30, 45, 400, 60, 75, 90, 80, 90, 500, 310, 120 } );

    }};

    private Myclass my = new Myclass();

    public static void main( String args[] ) {
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                new Iframe().setVisible( true );
            }
        });
    }

    public Iframe() {

        JPanel jp0 = new JPanel( new GridLayout() );
        JPanel jp1 = new JPanel( new GridLayout( 1, 3 ) );
        JPanel jp2 = new JPanel( new BorderLayout() );

        for( Entry<String, int[]> entry : pentahexMap.entrySet() ) {
            JButton pentahexbutton1;
            try {
                URL imgUrl                = new URL(PATH + entry.getKey() +".jpg");
                ImageIcon pentaheximg1    = new ImageIcon( imgUrl );
                pentahexbutton1           = new JButton( pentaheximg1 );
            } catch( MalformedURLException e ) {
                pentahexbutton1 = new JButton( entry.getKey() );
            }
            pentahexbutton1.addActionListener( this );
            pentahexbutton1.setName( entry.getKey() );
            jp1.add( pentahexbutton1 );
        }

        jp1.setBorder( BorderFactory.createTitledBorder( "Pentahexes" ) );
        jp2.setBorder( BorderFactory.createTitledBorder( "Puzzle" ) );

        jp0.add( jp1 );
        jp0.add( jp2 );
        jp2.add( my );
        this.add( jp0 );
        this.add( jp2 );
        this.add( jp1, BorderLayout.EAST );
        this.setExtendedState( JFrame.MAXIMIZED_BOTH );
    }

    @Override
    public void actionPerformed( ActionEvent e ) {
        int[] data = pentahexMap.get( ((JButton)e.getSource()).getName() );
        if(data != null) {
            my.setData( data );
            my.invalidate();
            my.repaint();
        }
    }
}

class Myclass extends JPanel {
    int a, b, c, d, e, f, g, h, i, j, k, l;
    Myclass(){}
    Myclass( int... data ) {
        setData( data );
    }
    public void setData( int... data ) {
        if(data.length < 12) {
            throw new IllegalArgumentException("not enough data");
        }
        a = data[0];
        b = data[1];
        c = data[2];
        d = data[3];
        e = data[4];
        f = data[5];
        g = data[6];
        h = data[7];
        i = data[8];
        j = data[9];
        k = data[10];
        l = data[11];
    }
    @Override
    public void paintComponent( Graphics graphics ) {
        super.paintComponent( graphics );
        int[] xcoordinatesofthehexagon = new int[] { a, c, e, g, i, k };
        int[] ycoordinatesofthehexagon = new int[] { b, d, f, h, j, l };
        if(!isEmpty(xcoordinatesofthehexagon, ycoordinatesofthehexagon)){
            graphics.drawPolygon( xcoordinatesofthehexagon, ycoordinatesofthehexagon, 6 );
        }
    }
    private boolean isEmpty(int[] x,int[] y) {
        for( int i : y ) {
            if(i != 0) {
                return false;
            }
        }
        for( int i : x ) {
            if(i != 0) {
                return false;
            }
        }
        return true;
    }
}