Heim >Java >javaLernprogramm >Wie zentriert man ein Rechteck innerhalb eines Java-Frames richtig?

Wie zentriert man ein Rechteck innerhalb eines Java-Frames richtig?

Barbara Streisand
Barbara StreisandOriginal
2024-12-07 12:01:13390Durchsuche

How to Correctly Center a Rectangle within a Java Frame?

Zentrieren eines Rechtecks ​​in Java

Beim Versuch, ein Rechteck in Java zu zeichnen und es mit bestimmten Abmessungen zu zentrieren, kann es zu einem Problem mit der Fehlausrichtung kommen. Dies liegt daran, dass die Dekorationen des Rahmens (Rand und Titelleiste) in den Malbereich hineinragen.

Bei der Lösung wird stattdessen auf den Inhaltsbereich des Rahmens gemalt. Dadurch werden die Dekorationen des Rahmens vom Farbbereich ausgeschlossen, was zu einem korrekt zentrierten Rechteck führt.

Hier ist ein Codeausschnitt, der die korrigierte Methode veranschaulicht:

public class CenterOfFrame {
    
    public static void main(String[] args) {
        new CenterOfFrame();
    }
    
    public CenterOfFrame() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                new BadFrame().setVisible(true);

                JFrame goodFrame = new JFrame();
                goodFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                goodFrame.setContentPane(new PaintablePane());
                goodFrame.pack();
                goodFrame.setLocationRelativeTo(null);
                goodFrame.setVisible(true);
            }
        });
    }
    
    public class BadFrame extends JFrame {
        public BadFrame() {
            setSize(800, 400);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            paintTest(g, getWidth() - 1, getHeight() - 1);
        }
    }
    
    public void paintTest(Graphics g, int width, int height) {
        g.setColor(Color.RED);
        g.drawLine(0, 0, width, height);
        g.drawLine(width, 0, 0, height);
        g.drawRect(50, 50, width - 100, height - 100);
    }
    
    public class PaintablePane extends JPanel {
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 400);
        }
        
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            paintTest(g, getWidth() - 1, getHeight() - 1);
        }
    }
}

Dieser Code stellt ein Beispiel für das Zeichnen dar ein Rechteck in der Mitte eines Rahmens, unter Berücksichtigung der Dekorationen des Rahmens.

Das obige ist der detaillierte Inhalt vonWie zentriert man ein Rechteck innerhalb eines Java-Frames richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn