刚刚开始搞乱GUI。我希望这个程序绘制矩形/圆形(取决于用户点击的内容)并在前一个内部绘制相同的形状,直到达到用户放入文本字段的数量。当我运行它时,它似乎永远不会使它成为paintComponent。谢谢你的帮助。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ShapePanel extends JPanel implements ActionListener {
JTextField numOfShapes;
JButton square, circle, black, red, blue;
boolean isSquare = true;
boolean isCircle = false;
boolean isBlack = true;
boolean isRed = false;
boolean isBlue = false;
int num = 0;
ShapePanel() {
setLayout( new BorderLayout());
//Panel 1
JPanel p1 = new JPanel();
square = new JButton("Squares");
p1.add(square);
square.addActionListener( this );
circle = new JButton("Circles");
p1.add(circle);
circle.addActionListener( this );
numOfShapes = new JTextField(15);
p1.add(numOfShapes);
//numOfShapes.addKeyListener( this );
add(p1, BorderLayout.NORTH);
//Panel 3
JPanel p3 = new JPanel();
black = new JButton("Black");
p3.add(black);
black.addActionListener( this );
red = new JButton("Red");
p3.add(red);
red.addActionListener( this );
blue = new JButton("Blue");
p3.add(blue);
blue.addActionListener( this );
add(p3, BorderLayout.SOUTH);
}
@Override
public void actionPerformed(ActionEvent ae) {
String nOfS = numOfShapes.getText();
System.out.println("made it to action performed");
if(ae.getSource() == square){
isSquare = true;
}
if(ae.getSource() == circle){
isCircle = true;
}
if(ae.getSource() == black){
isBlack = true;
}
if(ae.getSource() == red){
isRed = true;
}
if(ae.getSource() == blue){
isBlue = true;
}
}
class Paint extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g);
JPanel p2 = new JPanel();
int c = 0;//change in size
int x1 = 20;
int x2 = 200;
int y1 = 20;
int y2 = 200;
String nOfS = numOfShapes.getText(); //number of shapes to be drawn
num = Integer.parseInt(nOfS);
System.out.println("Made it to paint component");
if (isBlack){
g.setColor(Color.BLACK);
isBlack = false;
}
if (isRed){
g.setColor(Color.RED);
isRed = false;
}
if (isBlue){
g.setColor(Color.BLUE);
isBlue = false;
}
if (isSquare){
for(int i = 0; i < num; i++){
x1+=c;
y1+=c;
x2-=c;
y2-=c;
g.drawRect(x1, y1, x2, y2);
c+=10;
}
isSquare = false;
}
if (isCircle){
for(int i = 0; i < num; i++){
x1+=c;
y1+=c;
x2-=c;
y2-=c;
g.drawOval(x1, y1, x2, y2);
c+=10;
}
isCircle = false;
}
add(p2, BorderLayout.CENTER);
}
}
}
public class lab14 {
public static void main(String[] args) {
JFrame application = new JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setSize(400, 400);
application.setLocationRelativeTo(null);
application.setTitle("Shapes");
application.add(new ShapePanel());
application.setVisible(true);
}
}
答案 0 :(得分:2)
paintComponent(...)
并调用super的方法,就像你一样。paintComponet
中添加组件到GUI。它应该只用于绘画和绘画。repaint()
。