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
Freigeben: 2024-12-07 12:01:13
Original
367 Leute haben es durchsucht

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);
        }
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage