Я студент-информатик, который использует MacBook Pro середины 2009 года под управлением OS X Yosemite 10.10.3. Недавно у меня была классная деятельность в моем объектно-ориентированном классе программирования, где мы поэтапно начали создавать интерактивную программу Java, в которой пользователь просто щелкает по футболу и наблюдает за тем, как он бьет по столу с зеленым фоном.Графика Java не отображается в OS X
Однако, несмотря на то, мой Java-код соответствует коду компьютеров Windows, моим одноклассников без каких-либо ошибок синтаксиса, есть некоторые проблемы с моей программой правильно работать во время их работы прекрасно:
В то время как окна для приложения открывается название и зеленый фон, не отображаются ни футбол, ни гол. Однако, если я вручную растягиваю окно, они показывают резервную копию. Я попытался изменить размеры окна, чтобы убедиться, что это не помогло.
При нажатии на футбол, вместо того, чтобы двигаться в направлении голени, как и предполагалось, и футбол, и голландский гол исчезают и не возвращаются. Отображается только зеленый фон, даже когда я снова пытаюсь растянуть окно вручную.
Я до сих пор передавал код своему инструктору, который отлично работал на его компьютере (он не понимает проблему либо с тех пор, как не использует OS X). Я попытался запустить код на двух других IDE, чтобы увидеть, была ли проблема Eclipse, но все они дали одинаковые результаты. Если это OS X или проблема с компьютером, как я могу обойти это?
Это мой текущий код:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Football extends JFrame {
final int WINDOW_WIDTH = 800;
final int WINDOW_HEIGHT = 400;
private int x = 40; // Ball's X coordinate
private int y = 300; // Ball's Y coordinate
private final int WIDTH = 35; // Ball's width
private final int HEIGHT = 60; // Ball's height
private final int X_MOVE = 14; // Pixels to move ball
private final int Y_MOVE = 4;
private final int TIME_DELAY = 25; // Time delay
private Timer timer; // Timer object
/**
init method
*/
public Football() {
setTitle("Football");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
// Set Background to a Dark Green
getContentPane().setBackground(new Color(0, 220, 50));
// initTimer();
addMouseListener(new FbMouseListener());
}
public void paint(Graphics g)
{
// Call the superclass paint method.
super.paint(g);
// Set the color to Brown
g.setColor(new Color(129, 74, 25));
// Draw the football
g.fillOval(x, y, WIDTH, HEIGHT);
// Draw the Goalpost
g.setColor(Color.YELLOW);
g.fillRect(670, 240, 5, 140);
g.fillRect(610, 80, 5, 140);
g.fillRect(740, 120, 5, 140);
// Need Thicker line
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(5));
g2.drawLine(612, 220, 742, 260);
}
private class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e) {
// Update the ball's position
y -= Y_MOVE;
x += X_MOVE;
// Force a call to the paint method
repaint();
}
}
public void initTimer()
{
timer = new Timer(TIME_DELAY, new TimerListener());
timer.start();
}
private class FbMouseListener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
if (e.getX() >= x && e.getX() <= (x + WIDTH) && e.getY() >= y && e.getY() <= (y + HEIGHT))
{
initTimer();
}
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args)
{
Football fb = new Football();
}
}
Любая помощь или предложения будут оценены, как я хотел бы, чтобы убедиться, что это не влияет на будущие программы я создаю.
Как правило, перекрывая 'paint' контейнера верхнего уровня, как' JFrame' это плохая идея, 'JFrame' содержит кучу дочерних компонентов, которые могут быть окрашены независимо от родителя, который, кажется, имеет место здесь – MadProgrammer