3
所以我有一个程序,在一组JButton和一个JTextArea旁边使用paintComponent(圆弧和椭圆,准确地)显示一个图像,并且我希望圆弧/椭圆改变大小时/如果用户更改框架的大小。我已经实现了getWidth,getHeight的东西,但我似乎无法得到它的工作。在Paintcomponent中调整大小
这是我的代码。如果我不setPreferredSize,那么它不工作;圆弧/椭圆在框架边缘和按钮之间被挤压。如果我尝试使用getWidth()和getHeight()而不是200的大小,它也不工作;弧/椭圆根本不显示。不知道该怎么办。
此外,任何提示让我的代码更加复杂(例如,如果只需要一个类),将不胜感激。
public class GUIDesign
{
public static void main(String[] args)
{
GUIFrame frame = new GUIFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class GUIFrame extends JFrame
{
PaintPanel2 canvas = new PaintPanel2();
public GUIFrame()
{
...
add(mainHolder, BorderLayout.CENTER); //has the JButtons, JTextArea.
add(canvas, BorderLayout.WEST);
this.setTitle("this");
this.pack();
this.setLocationRelativeTo(null);
}
}
class PaintPanel2 extends JPanel
{
private static int SIZE = 200;
public PaintPanel2()
{
setPreferredSize(new Dimension(SIZE, SIZE));
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
int xCenter = getWidth()/2;
int yCenter = getHeight()/2;
int startOvalX = (int) (xCenter/5);
int startOvalY = (int) (yCenter/5);
int endOvalX = (int) (xCenter * 1.5);
int endOvalY = (int) (yCenter * 1.5);
g.setColor(Color.green);
g.fillArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180);
g.setColor(Color.black);
g.drawArc(startOvalX, startOvalY, endOvalX, endOvalY, 0, 180);
g.setColor(Color.black);
g.fillOval((int)(startOvalX/1.5) - 1, (int) (startOvalY * 2.5),(int) (endOvalX * 1.1) + 2,(int)(endOvalY/1.5));
g.setColor(Color.green);
g.fillOval((int)(startOvalX/1.5), (int) (startOvalY * 2.5) -1,(int) (endOvalX * 1.1),(int)(endOvalY/1.5));
}
}
谢谢!现在我知道了,知道是战斗的一半。 – 00101100
当然。别客气。 –