我有一个框架,我在其上创建了一个主面板。
在那个面板上还有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);
}
}
答案 0 :(得分:1)
您可以向按钮添加操作并将面板作为参数传递
答案 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;
}
}