Я написал простые cookieUtils, он имеет три функции для создания файла cookie, чтения cookie и удаления cookie.
var CookieUtils = {
createCookie: function (name, value, expireTime) {
expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
var date = new Date();
date.setTime(date.getTime() + expireTime);
var expires = "; expires=" + date.toGMTString();
document.cookie = name + "=" + value + expires + "; path=/";
},
getCookie: function (name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) {
return parts.pop().split(";").shift();
}
},
deleteCookie: function(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
};
this.crossingP.paintComponent(comp2D);
Никогда этого не делайте! Ваша CrossingPane не добавляется ни к одному компоненту, поэтому repaint () не имеет никакого эффекта. Вы можете проверить это, добавив отпечатки в метод paintComponent (). Итак, вам нужно добавить CrossingPane в VisualizationPane:
setLayout(new BorderLayout());
add(crossingP, BorderLayout.CENTER);
Есть некоторые проблемы с центрированием изображения, но это не должно быть сложно исправить.
PS. Прочтите еще раз о макетах и покраске.
В дополнение к полезным наблюдениям @ tulskiy я бы добавил два момента:
Всегда создавайте свой графический интерфейс в потоке отправки событий , как показано ниже.
sscce должен быть кратким, автономным, правильным (компилируемым), Пример . Для удобства не требуйте от других воссоздавать несколько общедоступных классов; используйте классы верхнего уровня (частный пакет) или вложенные классы. Поскольку это проблема с графикой, используйте общедоступное или синтетическое изображение, которое отражает вашу проблему.
В приведенном ниже примере paintComponent ()
изменяет преобразование графического контекста, чтобы произвести поворот. Обратите внимание, что операции выполняются в (очевидном) обратном порядке объявления: сначала центр изображения переводится в начало координат; во-вторых, изображение поворачивается; в-третьих, центр изображения переводится в центр панели. Вы можете увидеть эффект, изменив размер панели.
Приложение: См. Также этот альтернативный подход с использованием AffineTransform
.
package overflow;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.*;
/**
* @see https://stackoverflow.com/questions/3371227
* @see https://stackoverflow.com/questions/3405799
*/
public class RotateApp {
private static final int N = 3;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(N, N, N, N));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 0; i < N * N; i++) {
frame.add(new RotatePanel());
}
frame.pack();
frame.setVisible(true);
}
});
}
}
class RotatePanel extends JPanel implements ActionListener {
private static final int SIZE = 256;
private static double DELTA_THETA = Math.PI / 90;
private final Timer timer = new Timer(25, this);
private Image image = RotatableImage.getImage(SIZE);
private double dt = DELTA_THETA;
private double theta;
public RotatePanel() {
this.setBackground(Color.lightGray);
this.setPreferredSize(new Dimension(
image.getWidth(null), image.getHeight(null)));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
image = RotatableImage.getImage(SIZE);
dt = -dt;
}
});
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.translate(this.getWidth() / 2, this.getHeight() / 2);
g2d.rotate(theta);
g2d.translate(-image.getWidth(this) / 2, -image.getHeight(this) / 2);
g2d.drawImage(image, 0, 0, null);
}
@Override
public void actionPerformed(ActionEvent e) {
theta += dt;
repaint();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(SIZE, SIZE);
}
}
class RotatableImage {
private static final Random r = new Random();
static public Image getImage(int size) {
BufferedImage bi = new BufferedImage(
size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(Color.getHSBColor(r.nextFloat(), 1, 1));
g2d.setStroke(new BasicStroke(size / 8));
g2d.drawLine(0, size / 2, size, size / 2);
g2d.drawLine(size / 2, 0, size / 2, size);
g2d.dispose();
return bi;
}
}