大家好我有這個問題,我似乎無法修復。我已經給了一些代碼,並且必須製作一個「tic tac toe」遊戲。相當原始。目前,我想要做的就是接受用戶輸入(它只是詢問你想要放置標記的行/列),它的目的是在電路板的相應方格上畫一個橢圓。我目前的代碼如下所示,工作已經指定我創建一個新類來處理用戶輸入。將項目添加到JFrame強制它們落後?
我目前只是試圖讓它添加新的項目到JFrame,但我沒有成功。我有一個虛擬的輸入呼叫,它不檢查我輸入的內容,而只是調用一個橢圓,它應該坐在左上角的第一個方格中。我可以將對象繪製到JFrame上(儘管它佔用了整個框架),但它始終放在實際板子的後面(即:如果我拉伸框架,我可以看到該圓圈)。我已經嘗試添加JPanels等,以便他們坐在董事會的頂部,但到目前爲止我沒有運氣。
下面是創建橢圓的代碼,我爲這個任務創建了橢圓。我正在做的是實例化一個新的位置爲(0,0,10,10)的橢圓。當它繪製時,它佔用整個JFrame,但它也是在實際的板子......任何想法?
package lab4;
import javax.swing.*;
import java.awt.*;
/** Oval Supplier Class
* Author: David D. Riley
* Date: April, 2004
*/
public class Oval extends JComponent {
/** post: getX() == x and getY() == y
* and getWidth() == w and getHeight() == h
* and getBackground() == Color.black
*/
public Oval(int x, int y, int w, int h) {
super();
setBounds(x, y, w, h);
setBackground(Color.black);
}
/** post: this method draws a filled Oval
* and the upper left corner of the bounding rectangle is (getX(), getY())
* and the oval's dimensions are getWidth() and getHeight()
* and the oval's color is getBackground()
*/
public void paint(Graphics g) {
g.setColor(getBackground());
g.fillOval(0, 0, getWidth()-1, getHeight()-1);
paintChildren(g);
}
}
編輯:這是現在的代碼,我們正在尋找AT--
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package lab4;
/**
*
* @author Scott
*/
import java.awt.*;
import java.util.Scanner;
import javax.swing.*;
public class GameBoard {
private JFrame win;
private int count = 1;
//Create new GUI layout
GridLayout layout = new GridLayout(3, 3);
JPanel panel = new JPanel(layout);
//Create a new Array of Rectangles
Rectangle[][] rect = new Rectangle[3][3];
public GameBoard() {
//Create new JFrame + Set Up Default Behaviour
win = new JFrame("Tic Tac Toe");
win.setBounds(0, 0, 195, 215);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setResizable(true);
//Loop goes through each line of the array. It creates a new rectangle
//determines it's colour based on modulus division
//Add's the rectangle to the JPanel.
for (int i = 0; i < rect.length; i++) {
for (int j = 0; j < rect[i].length; j++) {
rect[i][j] = new Rectangle(0, 0, 1, 1);
if (count % 2 != 0) {
rect[i][j].setBackground(Color.black);
} else {
rect[i][j].setBackground(Color.red);
}
panel.add(rect[i][j]);
count++;
}
}
//Sets the game to be visible.
win.add(panel);
win.setVisible(true);
//userInput();
}
private void userInput() {
Scanner scan = new Scanner(System.in);
}
}
你爲什麼使用'paint'?除了你沒有調用'super.paint',你應該使用'paintComponent' – MadProgrammer
好吧,我快速瀏覽了你的代碼,它絕對沒有辦法讓你的'GameBoard'方法工作。 'JFrame'不通過任何'add'方法接受'Rectangle',我知道它通常需要一個'Component'。如果沒有適當的[SSCCE](http://sscce.org/),將會很難幫到您 – MadProgrammer
您如何將您的Oval組件添加到JFrame?如果您只是簡單地調用add(new Oval())並且保留了JFrame內容窗格的默認LayoutManager,那麼您將使用BorderLayout來覆蓋對setBounds的調用並使橢圓佔據整個區域。 –