Mac OS X Java изначально не рисует - PullRequest
1 голос
/ 03 ноября 2011

Попытка работать с базовым свингом на Java продолжает вызывать у меня проблемы. Когда JFrame создается во время выполнения, ни один из компонентов не отрисовывается изначально, вам нужно изменить размер окна, чтобы вызывать paint (), очевидно? Есть ли простое исправление, которое мне не хватает?

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class LabTen extends JFrame{

    int x, y;

    public LabTen(){
        this.setSize(200,200);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.getContentPane().add(new Board()); //do this in the constructor    
    }

    public static void main(String[] args){
        LabTen one = new LabTen();
        one.repaint();
    }       
}
//mouseListener has more things when we're going in and out so you should have it too
//write on the component or pannel, not the frame
class Board extends JComponent implements MouseListener, MouseMotionListener{

    int mouseX, mouseY;

    public Board(){
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    public void mouseMoved(MouseEvent e){           
        this.mouseX = e.getX();
        this.mouseY = e.getY();
        this.repaint(); 
    }

    public void mouseDragged(MouseEvent e){
        //do nothing...
    }

    public void mouseClicked(MouseEvent e){         
    }

    public void mouseEntered(MouseEvent e){         
    }

    public void mouseExited(MouseEvent e){
    }

    public void mousePressed(MouseEvent e){         
    }

    public void mouseReleased(MouseEvent e){
    }

    public void paintComponent(Graphics g){
        //g.drawString("(" + this.mouseX + ", " + this.mouseY +  ")", this.mouseX,this.mouseY);
        //this uses the default way
        // g.drawLine(this.getWidth()/2, this.getHeight()/2, this.mouseX, this.mouseY);

        double distance = Math.sqrt(Math.pow(this.mouseX - this.getWidth()/2, 2) + Math.pow(this.mouseY - this.getHeight()/2, 2));          
        int centerX = this.getWidth()/2;
        int centerY = this.getHeight()/2;

        for(int i = 0; i < 20; i++){
            double distanceX = 
            g.drawLine(centerX, centerY, (centerX))
        }           
    }
}

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

Как только вы закончите настройку JFrame, вы должны позвонить jFrame.pack() и jFrame.setVisible(true).

2 голосов
/ 03 ноября 2011

Все компоненты должны быть добавлены в контейнер, прежде чем он реализован .

2 голосов
/ 03 ноября 2011

Вы делаете это совершенно не в том порядке. Сделай так:

  1. Добавить компонент

    this.add(new Board());
    
  2. Установите предпочтительный размер

    this.setPreferredSize(new Dimension(200, 200));
    
  3. Упаковать рамку

    this.pack();
    
  4. Установить видимую рамку.

    this.setVisible(true);
    

Конечно, this - это ваш JFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...