숙제의 경우 프레임이있는 "CustomButton"을 만들려고하는데 그 프레임에 두 개의 삼각형과 그 위에 사각형을 그립니다. 사용자가 우울하게되면 버튼 누르기 효과를 사용자에게 제공해야합니다. 그래서 처음에는 두 개의 삼각형과 사각형을 그린 시작 그래픽을 설정하려고합니다. 내가 가지고있는 문제는 내가 프레임을 200, 200, 삼각형으로 설정했지만 프레임 크기의 정확한 끝으로 생각한다. 프로그램을 실행할 때 창을 확장하여 전체 작품을 만들고, 내 "CustomButton"을 볼 수 있습니다. 그게 정상인가요? 감사.간단한 프레임 및 그래픽에 대한 도움말
코드 :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CustomButton
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
CustomButtonFrame frame = new CustomButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class CustomButtonFrame extends JFrame
{
// constructor for CustomButtonFrame
public CustomButtonFrame()
{
setTitle("Custom Button");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
CustomButtonSetup buttonSetup = new CustomButtonSetup();
this.add(buttonSetup);
}
private static final int DEFAULT_WIDTH = 200;
private static final int DEFAULT_HEIGHT = 200;
}
class CustomButtonSetup extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// first triangle coords
int x[] = new int[TRIANGLE_SIDES];
int y[] = new int[TRIANGLE_SIDES];
x[0] = 0; y[0] = 0;
x[1] = 200; y[1] = 0;
x[2] = 0; y[2] = 200;
Polygon firstTriangle = new Polygon(x, y, TRIANGLE_SIDES);
// second triangle coords
x[0] = 0; y[0] = 200;
x[1] = 200; y[1] = 200;
x[2] = 200; y[2] = 0;
Polygon secondTriangle = new Polygon(x, y, TRIANGLE_SIDES);
g2.drawPolygon(firstTriangle);
g2.setColor(Color.WHITE);
g2.fillPolygon(firstTriangle);
g2.drawPolygon(secondTriangle);
g2.setColor(Color.GRAY);
g2.fillPolygon(secondTriangle);
// draw rectangle 10 pixels off border
g2.drawRect(10, 10, 180, 180);
}
public static final int TRIANGLE_SIDES = 3;
}
기본 변수를 정적 변수에 저장하고 getPreferredSize()로 반환하는 것이 좋습니다. 그렇지 않으면 getPreferredSize()가 호출 될 때마다 새 인스턴스가 생성되며 이는 레이아웃에 따라 자주 발생할 수 있습니다. –
좋은 지적. 더 나은 해결책은 아마 구성 요소의 생성자에서'setPreferredSize()'를하는 것입니다. OP가 이것을 읽길 바랍니다. – aioobe