package Topic1;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;import Topic1.DrageFrame.ButtonAction;public class Test extends javax.swing.JFrame {
private Test outer1 = this;
public Test() {
  Init();
}

public void Init() {
JButton jb = new JButton("确定");
jb.addActionListener(new ButtonAction());
this.add(jb);
this.setSize(600,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class ButtonAction implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
       
   outer1.add(new DrawPanel1());
  }
}
public static void main(String [] args){
//创建窗口对象
Test t = new Test();
  }
}
class DrawPanel2 extends JPanel {
public void paintComponent(Graphics g) { 
  super.paintComponent(g); 
  Polygon po1 = new Polygon(); 
  g.setColor(Color.RED); 
  int[] X = {0,100,100,0};
  int[] Y = {0,0,100,100};
      g.drawPolygon(X,Y,4);
  g.dispose(); 

  }想点击“确定”按钮,画一个设定的四边形,怎么不能出现四边形;错误在哪里,急盼回复!!!

解决方案 »

  1.   

    没有更新, 并且你的东西都在button后面怎么看.
    public void actionPerformed(ActionEvent e) {      
      outer1.add(new DrawPanel2());
      outer1.validate();  //注意要更新
      } 
    }
    其他地方注意提示:
    [1]不用费一个变量去存窗体引用, outer1写成Test.this 就可以了, this本来就已经保存在类里面了.
    [2]g.dispose(); 不应该被dispose(). 这里的g不是你创建出来, 给系统去处理是安全
    [3]g.setColor(Color.RED); 
    应该
    Color c = g.getColor();
    g.setColor(Color.RED); 
    ..... //其他操作
    g.setColor(c);  //还原原来的颜色
    这样才是最安全的代码.
      

  2.   

    这位兄弟说的很清楚了。也很正确。添加的时候outer1.add(new DrawPanel1()); 才对吧?
    this.add(jb, BorderLayout.NORTH);不然都放一块去了,按钮在前,点了以后panel在前。混乱。自己尝试一下。
    this.add(jb, BorderLayout.NORTH);只是一种布局。想要什么布局自己更改。