Ich versuche, 100 Strings mit dem angegebenen JTextField anzuzeigen, sobald ich die Draw-Taste drücke, und kann dann alle 90 Grad drehen, wenn ich den Drehknopf drücke. Wenn ich rotiere, erscheinen jedoch einige der Saiten von früher. Aber dann wird das ganze Panel gelöscht, sobald die Saiten nach unten zeigen. Warum ist das?Warum löscht sich dieses JPanel nicht von irgendwelchen Grafiken?
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class RotateAndDraw extends JFrame implements ActionListener{
// Declare all member variables
private JFrame window;
private JButton drawButton;
private JButton rotateButton;
JTextField userInput = new JTextField("Enter text here");
private static JPanel p3 = new JPanel(); // Drawing surface
private static Graphics g = p3.getGraphics(); // Graphics context
private static int[] xArray = new int[100];
private static int[] yArray = new int[100];
private static int[] fontArray = new int[100];
private static float[] colorArray = new float[100];
private static int rotateCount = 0;
private static int theta;
public RotateAndDraw(){
// Declare all components
window = new JFrame("Rotate and Draw");
drawButton = new JButton("Draw");
rotateButton = new JButton("Rotate");
drawButton.addActionListener(this);
rotateButton.addActionListener(this);
JPanel drawingSurface = new JPanel();
JLabel userInputLabel = new JLabel("Text: ");
// Create some containers
JPanel content = new JPanel();
content.setLayout(new GridLayout(3, 1));
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(1, 2));
p1.add(drawButton);
p1.add(rotateButton);
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(1, 3));
userInputLabel.setHorizontalAlignment(SwingConstants.RIGHT);
p2.add(userInputLabel);
p2.add(userInput);
JLabel nullLabel = new JLabel("");
p2.add(nullLabel);
p3.setBackground(Color.BLACK);
content.add(p1);
content.add(p2);
content.add(p3);
window.add(content);
}
public void run(){
window.setLocation(100, 100);
window.setSize(10000, 10000);
window.setDefaultCloseOperation(EXIT_ON_CLOSE);
window.setVisible(true);
}
private void paintComponent(Graphics g){
// TODO Auto-generated method stub
super.paintComponents(g);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
super.paintComponents(g);
Graphics2D g2 = (Graphics2D)g;
String message = userInput.getText();
Font font1, font2, font3, font4, font5; // The five fonts.
font1 = new Font("Serif", Font.BOLD, 14);
font2 = new Font("SansSerif", Font.BOLD + Font.ITALIC, 24);
font3 = new Font("Monospaced", Font.PLAIN, 30);
font4 = new Font("Dialog", Font.PLAIN, 36);
font5 = new Font("Serif", Font.ITALIC, 48);
if(e.getSource() == drawButton){
g = p3.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, p3.getWidth(), p3.getHeight());
rotateCount = 0;
int width = p3.getWidth();
int height = p3.getHeight();
for (int i = 0; i < 100; i++) {
int fontNum = (int)(5*Math.random()) + 1;
fontArray[i] = fontNum;
switch (fontNum) {
case 1:
g.setFont(font1);
break;
case 2:
g.setFont(font2);
break;
case 3:
g.setFont(font3);
break;
case 4:
g.setFont(font4);
break;
case 5:
g.setFont(font5);
break;
} // end switch
float hue = (float)Math.random();
colorArray[i] = hue;
g.setColor(Color.getHSBColor(hue, 1.0F, 1.0F));
int x,y;
x = (int)(Math.random()*(width));
y = (int)(Math.random()*(height));
xArray[i] = x;
yArray[i] = y;
// Draw the message.
g.drawString(message,x,y);
} // end for
}// end if
if(e.getSource() == rotateButton){
super.paintComponents(g2);
g2.setColor(Color.BLACK);
g2.fillRect(0, 0, p3.getWidth(), p3.getHeight());
rotateCount++;
if(rotateCount == 4){
rotateCount = 0;
}
switch(rotateCount){
case 0:
theta = 0;
break;
case 1:
theta = 90;
break;
case 2:
theta = 180;
break;
case 3:
theta = 270;
break;
}
for(int i = 0; i < 100; i++){
switch(fontArray[i]){
case 1:
g2.setFont(font1);
break;
case 2:
g2.setFont(font2);
break;
case 3:
g2.setFont(font3);
break;
case 4:
g2.setFont(font4);
break;
case 5:
g2.setFont(font5);
break;
} // end switch
g2.setColor(Color.getHSBColor(colorArray[i], 1.0F, 1.0F));
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(theta), xArray[i], yArray[i]);
g2.setTransform(at);
g2.drawString(message, xArray[i], yArray[i]);
g2.transform(new AffineTransform());
}// end for
}
}
}