说让画两个OvalButton,想add两个OvalButton不行,因为修改过paintComponent,每次调用就把前边画的清空了,只能调用一次啊,题上却说显示两个OvalButton对象,纠结了,难道还是从paintComponent入手?主要掌握方法太少了,现在主要就是书上给的一种方法,定义一个类,重写paintComponent方法,调用一下,画图。除了后边几个选修的没来得及看。
重点:前边有个FigurePanel类,也是让显示6个图形面板对象,出现了editor does not contain a main type错误,就是说:
还没找到方法画出多个对象
package Program13;
import java.awt.FlowLayout;import java.awt.Graphics;
import javax.swing.JFrame;import javax.swing.JPanel;
public class Program_13_1_bV2 extends JFrame{ public Program_13_1_bV2(){ add(new OvalButton("Cancel",130,30)); add(new OvalButton("OK",30,30));
} public static void main(String[] args){ Program_13_1_bV2 frame = new Program_13_1_bV2(); frame.setTitle("Program_13_1_bV2"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(320,210); frame.setVisible(true); }}class OvalButton extends JPanel{ private String str="hello"; private int xCoordinate; private int yCoordinate; public OvalButton(){ } public OvalButton(String str,int xCoordinate,int yCoordinate){ this.str = str; this.xCoordinate = xCoordinate; this.xCoordinate = xCoordinate; } protected void paintComponent(Graphics g){// super.paintComponent(g); g.drawRect(xCoordinate,yCoordinate+30,100,60); g.drawOval(xCoordinate+3,xCoordinate+3,94,54); g.drawString(str,xCoordinate+42 ,xCoordinate+36 ); }}
棋盘太简单了,不用费时间想怎么做。问题是,画图的尺寸老对不上,比如,8*8 == 64格的图,每格width是40,height是20,那如果用Size == (320,160);图是画不全的,必须自己一点一点试出来是335,195。这个问题已经搁置了一阵子了
package Program13;
import java.awt.Graphics;
import javax.swing.JFrame;import javax.swing.JPanel;
public class Program_13_1_c extends JFrame{ public Program_13_1_c(){ add(new chessBoard()); } public static void main(String[] args){ Program_13_1_c frame = new Program_13_1_c(); frame.setTitle("Program_13_1_bV2"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(335,195); frame.setVisible(true); }}class chessBoard extends JPanel{ protected void paintComponent(Graphics g){ super.paintComponent(g); for(int i = 0;i < 8;i++){ for(int j = 0;j < 8;j++){ if(((i + j) % 2) == 0) g.drawRect(40*i, 20*j, 40, 20); else g.fillRect(40*i, 20*j, 40, 20); } } }}
