import javax.swing.*;
import java.awt.*;
public class CGLinesGrid extends JFrame {
public CGLinesGrid() {
super ("Exercise 4");
setSize (500, 500);
setVisible(true);
}
public void paint (Graphics g) {
for (int i = 1; i<=9 ; i++) {
g.drawLine(70, 30+i*40, 390, 30+i*40);
g.drawLine(30+i*40, 70, 30+i*40, 390);
}
for (int i = 1; i<=9 ; i++) {
g.drawOval(70, 20+i*40, 40, 10+i*30);
}
}
public static void main (String[] args) {
CGLinesGrid draw = new CGLinesGrid();
draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
回答
找到解決方案之前的幾件事情。
首先,由於@RealSkeptic說,從來沒有從您的組件內調用paint()
方法。始終使用paintComponent(Graphics g)
方法。
其次,調用paintComponent()
方法時,一定要調用的paintComponent方法使用
super.paintComponent(g);
第三它的父類的的paintComponent()方法不應該直接在JFrame
調用,使用JPanel
。
現在解決方案。
你想要一個8x8的正方形網格,每個正方形都有一個圓圈。
最簡單的方法是使用一個JPanel
,它有一個GridLayout
並將64 JLabel
添加到它。然後,每個JLabel將在該廣場上打印一個正方形和圓圈。
從底部開始,我們需要創建一個打印出正方形和圓形的JLabel:
class SquareWithCircleLabel extends JLabel {
@Override
public void paintComponent(Graphics g) {
//notice the call to its parent method
super.paintComponent(g);
//draw the square and circle
g.drawRect(0, 0, this.getWidth(), this.getHeight());
g.drawOval(1, 1, this.getWidth() - 1, this.getHeight() - 1);
}
}
接下來我們需要一個JPanel
包含在8×8格所有這些JLabel
S:
class PaintPanel extends JPanel {
PaintPanel() {
//give it a 8 x 8 GridLayout
setLayout(new GridLayout(8, 8));
//add 81 labels to the JPanel and they will automatically be formatted into a 9 x 9 grid because of our GridLayout
for (int i = 0; i < 64; i++) {
add(new SquareWithCircleLabel());
}
}
}
現在我們需要在構造函數中只是這個JPanel
添加到我們的JFrame
add(new PaintPanel());
完整的代碼如下所示:
import javax.swing.*;
import java.awt.*;
public class CGLinesGrid extends JFrame {
public CGLinesGrid() {
super ("Exercise 4");
setSize (500, 500);
add(new PaintPanel());
setVisible(true);
}
public static void main (String[] args) {
CGLinesGrid draw = new CGLinesGrid();
draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class PaintPanel extends JPanel {
PaintPanel() {
setLayout(new GridLayout(9, 9));
for (int i = 0; i < 81; i++) {
add(new SquareWithCircleLabel());
}
}
}
class SquareWithCircleLabel extends JLabel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0, 0, this.getWidth(), this.getHeight());
g.drawOval(1, 1, this.getWidth() - 1, this.getHeight() - 1);
}
}
}
Sir Yitzih,你給的代碼doesn' t工作在我的Java?Idk爲什麼。在添加的2個類中存在錯誤 –
@DarrelDelaCruz你得到了什麼錯誤? – yitzih
它說2個類的層次結構不一致:( –
- 1. 使用GL_TRIANGLE_FAN OpenGL把橢圓內的圓?
- 2. 橢圓如何與橢圓相交?
- 3. 橢圓選框/結束
- 4. Qt橢圓邊框變薄
- 5. 在橢圓內繪製文本橢圓內的另一個橢圓在畫布上android
- 6. 橢圓vs圓
- 7. 爪哇環內橢圓
- 8. 在矩形內創建橢圓/圓形
- 9. 將圓轉換爲橢圓,以便從橢圓邊框計算點的距離
- 10. 如何獲得EditText橢圓?
- 11. 如何切割橢圓?
- 12. iPhone如何半夾橢圓
- 13. 如何繪製軸橢圓
- 14. 如何使橢圓閃爍?
- 15. Pyqtgraph:如何繪製橢圓或圓形
- 16. 如何在網格單元內繪製圓/橢圓?
- 17. React Native中的橢圓邊框半徑
- 18. 找到一個點到橢圓的距離,其橢圓的內部或外部
- 19. 橢圓內部的顏色是什麼?
- 20. PHP:檢查橢圓內的點/座標
- 21. 內存沉重的橢圓梯度
- 22. 在圖片框中的橢圓內鎖定鼠標光標
- 23. 橢圓與CombinedGeometry
- 24. 橢圓有孔
- 25. 繪製橢圓
- 26. 橢圓NSTextField?
- 27. 橢圓繪圖
- 28. 橢圓SKPhysicsBody
- 29. 橢圓驗證
- 30. 橢圓路徑
這是什麼問題? – ChiefTwoPencils
我創建了一個8x8網格。我想把橢圓放在它們裏面。你能幫我嗎? :( –
不要重寫'paint',你應該重寫'paintComponent'方法 – RealSkeptic