Shikaku-Game을 프로그래밍해야하는데 MyMouseAdapter 클래스의 mouseReleased-Method에서 ViewIcon-Class의 setLine-Methods 중 하나를 사용할 수 없다는 문제가 없습니다. 방법 중 하나를 사용하는 방법을 알고 있습니까?
감사합니다. 건배, 나
MouseMain 클래스 및 MyMouseAdapter 클래스 :
class MouseMain extends JFrame{
Container cont;
public MouseMain () {
super("Test");
cont = getContentPane();
p1 = new defaultPaterns(2);
p1.setLayout(new GridLayout(2, 2, 1, 1));
for (int i = 0; i < gameSize; i++) {
for (int j = 0; j < gameSize; j++) {
JLabel label = new JLabel(new ViewIcon());
label.setName (j + ";" + i);
label.addMouseListener(new MyMouseAdapter());
p1.add(label);
myLabels[j][i] = label;
}
}
cont.add(p1, BorderLayout.CENTER );
JPanel p2 = new JPanel();
cont.add(p2, BorderLayout.SOUTH);
setVisible(true);
}
public class MyMouseAdapter extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
lastEntered = e.getComponent();
}
public void mousePressed(MouseEvent e) {
mousePressed = e.getComponent();
coordPressed = new Coordinate(mousePressed.getName());
System.out.println("mousePressed " + mousePressed.getName());
}
public void mouseReleased(MouseEvent e) {
mouseReleased = lastEntered;
coordReleased = new Coordinate(mouseReleased.getName());
System.out.println("mouseReleased " + mouseReleased.getName());
if (mouseReleased.getName().equals("0;0")) {
mouseReleased.setForeground(Color.RED);
mouseReleased.repaint();
}
}
}
클래스 ViewIcon :
class ViewIcon extends JLabel implements Icon {
Graphics2D g2;
int width;
int height;
public void paintIcon(Component c, Graphics g, int x, int y) {
g2 = (Graphics2D) g;
width = c.getWidth();
height = c.getHeight();
g2.setColor(Color.LIGHT_GRAY);
g2.fillRect(0, 0, width, height);
}
public void setLeftLine() {
g2.setStroke (new BasicStroke (10));
g2.setColor(Color.RED);
g2.drawLine(0, 0, 0, height);
}
}
class ViewIcon extends JLabel implements Icon {
JLabel을 확장하지 마십시오. 코드가 수행하는 모든 작업은 Icon 인터페이스를 구현하는 것입니다.
ViewIcon-Class에서 setLine-Methods 중 하나를 사용할 수 없습니다.
커스텀 페인팅은 paintIcon (...) 메소드에서만 수행해야합니다. 페인팅 메서드를 직접 호출해서는 안됩니다.
그림의 모양을 변경하려면 아이콘의 속성을 설정해야합니다. 예를 들어 맨 위 줄을 그리려면 이름을 바꾸고 setTopLine(...)
방법을 다음과 같이 변경하십시오 .
public void setTopLinePainted(boolean topLinePainted)
{
this.topLinePainted = topLinePainted;
}
그런 다음 paintIcon (...) 메소드에 다음과 같은 코드가 있습니다.
g2.fillRect(0, 0, width, height);
if (topLinePainted)
{
g2.setStroke (new BasicStroke (10));
g2.setColor(Color.RED);
g2.drawLine(0, 0, width, 0);
}
그런 다음 mouseReleased (...) 코드에서 다음과 같은 작업을 수행합니다.
JLabel label = (JLabel)lastEntered;
ViewIcon icon = (ViewIcon)label.getIcon();
icon.setTopLinePainted( true );
label.repaint();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다