2014-12-13 3 views
1

Я создал класс карты, который расширяет JComponent. Я не использую никаких макетов. Но когда я добавить свою карту в JFrame в spesific местоположения с использованием SetBounds() метод, образ отрезает, как это: enter image description hereПочему мое изображение не полностью окрашено?

Метод краски карта:

@Override 
public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    if(degrees!=0) g2d.rotate(Math.toRadians(degrees)); 
    int first,second; 
    switch(colorCardType){ 
    case RED_HEART: first = 0; 
     break; 
    case RED_DIAMOND: first = 1; 
     break; 
    case BLACK_SPADE: first = 2; 
     break; 
    case BLACK_CLUB: first = 3; 
     break; 
    default: first = 4; 
     break; 
    } 
    switch(cardType) { 
    case ACE: second = 0; 
     break; 
    case TWO: second = 1; 
     break; 
    case THREE: second = 2; 
     break; 
    case FOUR: second = 3; 
     break; 
    case FIVE: second = 4 ; 
     break; 
    case SIX: second = 5; 
     break; 
    case SEVEN: second = 6 ; 
     break; 
    case EIGHT: second = 7; 
     break; 
    case NINE: second =8 ; 
     break; 
    case TEN: second = 9; 
     break; 
    case JACK: second = 10; 
     break; 
    case QUEEN: second = 11; 
     break; 
    case KING: second = 12; 
     break; 
    default: second = 0; 
     break; 
    } 
    g2d.drawImage(images[first][second], super.getX(), super.getY(), null); 
} 

Основной код: (импортная часть)

frame = new JFrame(); 
frame.setLayout(null); 
Card test = new Card(CardType.ACE,ColorCardType.RED_HEART,0); 
frame.add(test); 
test.setBounds(40,0,72,96); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 

ответ

3

В методе краски координаты относительно самого компонента. Заменить super.getX(), super.getY() с координатами относительно самого компонента; верхний левый угол, например, равен 0, 0.

Так как вы хотите, чтобы иметь возможность вращать изображение, вам нужно сделать компонент, как большой, как диагональной длины Image, √ (72 + 96), или 120 на 120 пикселей.

Наконец, вы хотите нарисовать карту относительно центра компонента. Перед вашей g2d.rotate добавить это изменить рисунок начало координат в центре компонента:

g2d.translate(getWidth()/2.0, getHeight()/2.0); 

Затем измените вызов DrawImage рисовать относительно центра компонента:

g2d.drawImage(images[first][second], -(72/2), -(96/2), null); 

В идеале, конечно, 72 и 96 не должны быть жестко закодированы и должны быть получены из размера самого изображения (что легко, если изображение BufferedImage, но не так просто).

+0

Спасибо, это работает. Но теперь, когда я пытаюсь повернуть его, карта снова отключается. [пример] (http://prntscr.com/5gmczg) –

+0

Метод с одним аргументом Graphics2D.rotate вращается вокруг начала координат (0, 0). Вероятно, вы захотите использовать метод поворота с тремя аргументами (https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html#rotate-double-double-double-), который вращается вокруг любой точки, которую вы указываете. Попробуйте повернуть вокруг центра компонента: 'g2d.rotate (Math.toRadians (degrees), getWidth()/2.0, getHeight()/2.0)' – VGR

+0

это немного помогло, [но оно все еще отключается.] (Http: /prntscr.com/5gstc9) –

Смежные вопросы