фигуры не будут отображаться на моем графическом интерфейсе JFrame - PullRequest
0 голосов
/ 24 августа 2018

вот как выглядит мой код

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


public class Test {

 public static void main(String[] args) {
    JFrame frame = new JFrame();
    MyDrawPanel shape = new MyDrawPanel();
    frame.getContentPane().add(shape);

    frame.setSize(500,500);
    frame.setVisible(true);


 }

}
class MyDrawPanel extends JPanel{

 public void paintComponent (Graphics g) {
     g.setColor(Color.ORANGE);
     g.fillRect(20, 50, 100, 100);

 }
}

Когда я запускаю его, единственное, что отображается, это рамка, а не фактическая форма.Я что-то упускаю?

1 Ответ

0 голосов
/ 24 августа 2018

Обратите внимание, что этот ответ не отвечает на ваш прямой вопрос о том, почему ваш опубликованный код не работает, потому что, хотя у вашего кода есть проблемы, он все равно должен отображать квадрат.Но, сказав это, этот пост призван предложить несколько советов по «лучшим» практикам:

  • Избегайте магических значений и магических чисел
  • Используйте @Override аннотации для любого метода, который вы думаю, является переопределением
  • Метод paintComponent защищен, а не общедоступен
  • Вызовите метод super в вашем переопределении
  • Лучше переопределить getPreferredSize из JPanelесли вам нужно исправить его размер
  • Запустите графический интерфейс Swing в потоке событий Swing для обеспечения безопасности потоков
  • Избегайте жесткого кодирования позиций графического чертежа, особенно если вы думаете о его анимациипозже

Это лучшее представление вашего кода:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.*;

public class Test2 extends JPanel {
    private static final int PREF_W = 500;
    private static final int PREF_H = PREF_W;
    private static final Color RECT_COLOR = Color.ORANGE;
    private static final int RECT_WIDTH = 100;
    private static final int INIT_X = 20;
    private static final int INIT_Y = 50;
    private int rectX = INIT_X;
    private int rectY = INIT_Y;

    public Test2() {
        // TODO any initialization code goes here
    }

    // override annotation
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // avoid magic values and numbers
        g.setColor(RECT_COLOR);
        g.fillRect(rectX, rectY, RECT_WIDTH, RECT_WIDTH);
    }

    // best way to set size safely
    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }


    private static void createAndShowGui() {
        Test2 mainPanel = new Test2();

        JFrame frame = new JFrame("Test2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // be sure to start the GUI on the event thread
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...