Как и в названии, мой экран java продолжает оставаться пустым. Я хочу, чтобы он отображал формы классов и две метки. Дайте мне знать, если вы хотите увидеть другой класс, который касается линий рисования и xs. Это то, что я до сих пор:Java Screen Is Blank
--- EDIT ---
С ya'll дали мне предложения, я сделал некоторые успехи. Я удалил достойный бит кода из метода Paint Shapes и переместил его в другой метод или новый класс, чтобы сохранить его в чистоте. Shape по-прежнему делает страницу пустой, но все выглядит лучше. Кроме того, НЕ Вставляйте код для ответа. Будучи студентом, мне было поручено не копировать код. Такие направления, как «создать 3 для циклов и сделать целое число», считаются приемлемыми. Еще раз спасибо! Все были очень полезны!
--- EDIT --- После разговора с учителем я успешно отделил графические компоненты фигур и поместил их в Moves. Формы знают, задают вопросы и работают правильно. Я верю, что мне все еще нужно внести несколько корректировок для Moves, чтобы нарисовать все, но я считаю, что теперь все будет работать лучше. Я покажу, как это будет выглядеть. Еще раз спасибо за то, что помогли мне встать на правильный путь!
Project1 (или основной)
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Project1 implements Runnable{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Project1());
}
@Override
public void run(){
//Asterick a = new Asterick();
//fsu title bar and footer
JLabel header = new JLabel("FSU");
JLabel footer = new JLabel("By Jared Scott");
//CREATE EVERYTHING
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
frame.setSize(400, 700);
Shapes as = new Shapes();
//Asterick as = new Asterick();
String message =
String.format("Enter a number from"
+ " 1-9 to play tick tack toe.\n" + "The order of squares is\n" +
"1 4 7\n2 5 8\n3 6 9" +
"\nThe game ends when one player has three Xs or Os" +
" in a row.");
JOptionPane.showMessageDialog(null, message);
//this works
panel.add(header, BorderLayout.NORTH);
panel.add(footer, BorderLayout.SOUTH);
panel.add(as, BorderLayout.CENTER);
frame.add(panel);
frame.setVisible(true);
}
}
Вот Формы:
public class Shapes extends JPanel{
//put graphics inside of moves
//shapes will send an int for moves to interpret
private int answer;
int[] locationFill = new int[ 9 ];
Moves move;
private int turn = 0;
char x = 'x';
char o = 'o';
public Shapes(){
setBackground(Color.WHITE);
ask();
}
public void ask(){
String tryAgain =
String.format("Already in use. Please choose again.");
while(getTurn() <= 9){
goesNext(getTurn());
String input = JOptionPane.showInputDialog("Choose your square");
answer = Integer.parseInt(input);
//put these in pop up questions
switch(answer){
case 1:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
} else if(whatToDraw(answer) == true){
move = new Moves(answer, x);
locationFill[0] = 1;
turn++;
won();
} else {
move = new Moves(answer, o);
locationFill[0] = 2;
turn++;
won();
}
break;
case 2:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[1] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[1] = 2;
turn++;
won();
}
break;
case 3:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[2] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[2] = 2;
turn++;
won();
}
break;
case 4:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[3] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[3] = 2;
turn++;
won();
}
break;
case 5:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[4] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[4] = 2;
turn++;
won();
}
break;
case 6:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[5] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[5] = 2;
turn++;
won();
}
break;
case 7:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true){
move = new Moves(answer, x);
locationFill[6] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[6] = 2;
turn++;
won();
}
break;
case 8:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[7] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[7] = 2;
turn++;
won();
}
break;
case 9:
if(!isEmpty(answer)){
JOptionPane.showMessageDialog(null, tryAgain);
}else if(whatToDraw(answer) == true ){
move = new Moves(answer, x);
locationFill[8] = 1;
turn++;
won();
}else{
move = new Moves(answer, o);
locationFill[8] = 2;
turn++;
won();
}
break;
default:
System.out.println("Somethings wrong");
break;
}//end switch
tie();
}//end while
}
public void goesNext(int turn){
String player1 =
String.format("Player1's Turn");
String player2 =
String.format("Player2's Turn");
if(turn == 0 || turn % 2 == 0){
JOptionPane.showMessageDialog(null, player1);
}else{
JOptionPane.showMessageDialog(null, player2);
}
}
public boolean isEmpty(int i){
boolean answer2 = true;
if(locationFill[ i - 1 ] == 0){
answer2 = true;
}else if(locationFill[ i - 1 ] == 1 || locationFill[ i - 1 ] == 2){
answer2 = false;
}
return answer2;
}//end isEmpty
public void won(){
String message =
String.format("Three in a row!\nPlayer2 win!");
String message2 =
String.format("Three in a row!\nPlayer1 win!");
if((locationFill[0] == 1 && locationFill[1] == 1 &&
locationFill[2] == 1) || (locationFill[3] == 1 &&
locationFill[4] == 1 &&
locationFill[5] == 1) || (locationFill[6] == 1 &&
locationFill[7] == 1 &&
locationFill[8] == 1) || (locationFill[0] == 1 &&
locationFill[4] == 1 &&
locationFill[8] == 1) || (locationFill[1] == 1 &&
locationFill[4] == 1 &&
locationFill[7] == 1) || (locationFill[0] == 1 &&
locationFill[3] == 1 &&
locationFill[6] == 1) || (locationFill[2] == 1 &&
locationFill[5] == 1 &&
locationFill[8] == 1) || (locationFill[6] == 1 &&
locationFill[4] == 1 &&
locationFill[2] == 1)){
JOptionPane.showMessageDialog(null, message);
System.exit(0);
}
if((locationFill[0] == 2 && locationFill[1] == 2 &&
locationFill[2] == 2) || (locationFill[3] == 2 &&
locationFill[4] == 2 &&
locationFill[5] == 2) || (locationFill[6] == 2 &&
locationFill[7] == 2 &&
locationFill[8] == 2) || (locationFill[0] == 2 &&
locationFill[4] == 2 &&
locationFill[8] == 2) || (locationFill[1] == 2 &&
locationFill[4] == 2 &&
locationFill[7] == 2) || (locationFill[0] == 2 &&
locationFill[3] == 2 &&
locationFill[6] == 2) || (locationFill[2] == 2 &&
locationFill[5] == 2 &&
locationFill[8] == 2) || (locationFill[6] == 2 &&
locationFill[4] == 2 &&
locationFill[2] == 2)){
JOptionPane.showMessageDialog(null, message2);
System.exit(0);
}
}//end won
public int getTurn(){
return turn;
}
public void tie(){
if(locationFill[0] != 0 && locationFill[1] != 0 &&
locationFill[2] != 0 && locationFill[3] != 0
&& locationFill[4] != 0 && locationFill[5] != 0
&& locationFill[6] != 0 && locationFill[7] != 0
&& locationFill[8] != 0){
String tie =
String.format("It's a tie!");
String gameOver =
String.format("Game Over");
JOptionPane.showMessageDialog(null, tie);
JOptionPane.showMessageDialog(null, gameOver);
System.exit(0);
}
}//end tie
public boolean whatToDraw(int choice){
boolean a;
if(locationFill[ choice - 1 ] == 0 && turn % 2 == 0){
a = true;
}else{
a = false;
}
return a;
}
}
Здесь вы Moves:
public class Moves extends JPanel{
Line[] x = new Line[ 18 ];
int choice = 0;
char letter;
public Line[] lines = new Line[ 6 ];
public Moves(){
}
public Moves(int i, char a){
letter = a;
choice = i;
//for graph
lines[ 0 ] = new Line(30, 330, 350, 330, Color.BLACK);
lines[ 1 ] = new Line(30, 225, 350, 225, Color.BLACK);
lines[ 2 ] = new Line(250, 130, 250, 440, Color.BLACK);
lines[ 3 ] = new Line(125, 130, 125, 440, Color.BLACK);
//create header and footer
lines[ 4 ] = new Line(0, 70, 400, 70, Color.BLACK);
lines[ 5 ] = new Line(0, 600, 400, 600, Color.BLACK);
x[0] = new Line(118, 220, 30, 130, Color.BLACK);//1
x[1] = new Line(30, 220, 118, 130, Color.BLACK);
x[2] = new Line(118, 320, 30, 230, Color.BLACK);//2
x[3] = new Line(30, 320, 118, 230, Color.BLACK);
x[4] = new Line(122, 440, 34, 335, Color.BLACK);//3
x[5] = new Line(34, 440, 122, 335, Color.BLACK);
x[6] = new Line(230, 220, 145, 130, Color.BLACK);//4
x[7] = new Line(145, 220, 230, 130, Color.BLACK);
x[8] = new Line(230, 320, 145, 230, Color.BLACK);//5
x[9] = new Line(145, 320, 230, 230, Color.BLACK);
x[10] = new Line(230, 440, 145, 335, Color.BLACK);//6
x[11] = new Line(145, 440, 230, 335, Color.BLACK);
x[12] = new Line(345, 220, 260, 130, Color.BLACK);//7
x[13] = new Line(260, 220, 345, 130, Color.BLACK);
x[14] = new Line(345, 320, 260, 230, Color.BLACK);//8
x[15] = new Line(260, 320, 345, 230, Color.BLACK);
x[16] = new Line(345, 440, 260, 335, Color.BLACK);//9
x[17] = new Line(260, 440, 345, 335, Color.BLACK);
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
for(Line line : lines){
line.draw(g);
}
}
//this will draw the Xs
public void drawX1(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX2(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX3(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX4(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX5(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX6(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX7(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX8(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
public void drawX9(Graphics g){
x[0].draw(g);
x[1].draw(g);
}
//this will draw the Os
public void drawO1(Graphics g){
g.drawOval(40, 135, 75, 75);
}
public void drawO2(Graphics g){
g.drawOval(40, 230, 75, 95);
}
public void drawO3(Graphics g){
g.drawOval(40, 350, 75, 90);
}
public void drawO4(Graphics g){
g.drawOval(135, 120, 100, 90);
}
public void drawO5(Graphics g){
g.drawOval(140, 230, 95, 100);
}
public void drawO6(Graphics g){
g.drawOval(150, 350, 80, 90);
}
public void drawO7(Graphics g){
g.drawOval(265, 130, 80, 80);
}
public void drawO8(Graphics g){
g.drawOval(265, 225, 80, 100);
}
public void drawO9(Graphics g){
g.drawOval(260, 350, 85, 90);
}
}
И линия:
import java.awt.Color;
import java.awt.Graphics;
//this will be for the 4 lines needed for tick tac toe
public class Line {
private int x1,
y1,
x2,
y2;
private Color myColor;
//this is for grid
public Line(int x1, int y1, int x2, int y2, Color color){
//set coordinants
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
myColor = color;
}//end constructor
public void draw(Graphics g){
g.setColor(myColor);
g.drawLine(x1, y1, x2, y2);
}//end draw
}//end class
Я запустил ваш код, прокомментировал строки о Shape, и после диалога с сообщением я получил окно с «FSU» и сверху и «By Jared Scott» внизу. Это ожидается.Необходимо увидеть класс Shape, чтобы помочь дальше. – NickJ
Что такое класс Shapes? вы можете показать свой код? –
ОК, я добавил. Таким образом, вы не смущены, это создает линии, которые либо станут Xs, либо графиком для метки tac. Он рисует их также после интерпретации ответа, поставленного в инструкции switch. – 2013-02-25 17:24:32