我想做一個程序,它有一個窗口,顯示一個多邊形和兩個按鈕。多邊形從3點開始(三角形),並允許用戶按下「+」和「 - 」按鈕來添加或減去多邊形的邊。這裏是我的代碼:Java多邊形調整大小
在TestPolygonBox:
package testpolygonbox
import javax.swing.*;
import java.awt.*;
public class TestPolygonBox extends JFrame {
public TestPolygonBox(){
setLayout(new BorderLayout(5,5));
add(new PolygonBox());
}
public static void main(String[] args) {
TestPolygonBox frame = new TestPolygonBox();
frame.setTitle("Polygon Box");
frame.setSize(400,420);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
接下來是控制類:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PolygonBox extends JPanel {
private JButton jbtEnlarge = new JButton("+");
private JButton jbtShrink = new JButton("-");
private PolygonPanel polygonPanel = new PolygonPanel();
public PolygonBox(){
JPanel panel = new JPanel();
panel.add(jbtEnlarge);
panel.add(jbtShrink);
setLayout(new BorderLayout());
this.add(polygonPanel,BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
jbtEnlarge.addActionListener(new EnlargeListener());
jbtShrink.addActionListener(new ShrinkListener());
}
class EnlargeListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
polygonPanel.enlarge();
}
}
class ShrinkListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
polygonPanel.shrink();
}
}
}
class PolygonPanel extends JPanel{
private int polygonSides = 3;
/** Add side to the polygon*/
public void enlarge(){
polygonSides++;
repaint();
}
public void shrink(){
polygonSides--;
repaint();
}
@Override /** Draw requested Shape*/
protected void paintComponent(Graphics g){
int frameWidth = getWidth()/2;
int frameHeight = getHeight()/2;
int radius = (int)(Math.min(getWidth(),getHeight())* 0.4);
int xCenter = getWidth()/2;
int yCenter = getHeight()/2;
g.setColor(Color.BLUE);
Polygon polygon = new Polygon();
polygon.addPoint(xCenter + radius, yCenter);
polygon.addPoint((int)(xCenter + radius * Math.cos(2 * Math.PI/polygonSides)),
(int)(yCenter - radius * Math.sin(2 * Math.PI/polygonSides)));
for (int polygonPoint = 2; polygonPoint <= polygonSides; polygonPoint++){
polygon.addPoint((int)(xCenter + radius * Math.cos(polygonPoint * 2 * Math.PI/polygonSides)),
(int)(yCenter - radius * Math.sin(polygonPoint * 2 * Math.PI/polygonSides)));
}
g.fillPolygon(polygon);
}
}
當我嘗試運行這個程序,我得到的錯誤: 異常在線程「 main「java.lang.IllegalArgumentException:在java.awt.Container.checkNotAWindow(Container.java:483) (java.awt.Container.addImpl(Container.java:1084))上添加窗口到容器 at java.awt.Container.add(Container.java:998) at javax.swing.JFrame.addImpl(JFrame.java:562) at java.awt.Container.add(Container.java:410) at 。testpolygonbox.TestPolygonBox(TestPolygonBox.java:21) 在testpolygonbox.TestPolygonBox.main(TestPolygonBox.java:24) Java結果:1
如果有人能告訴我在哪裏,我加入一個窗口添加到容器嗎?林不知道我做錯了什麼。
嘿,不要刪除和重新發布的問題,至少不會這麼快。 – DSquare