Another possibility is to set the stretchable-width of the message to #f, this way the message does not take more than its minimal required space.
#lang racket/gui
(define (example)
(define frame (new frame% [label "Alignment example"] [width 400]))
(define vbox (new vertical-panel% [parent frame]))
(define (test h-align)
(define p (new horizontal-panel% [parent vbox] [alignment `(,h-align center)]))
(new message% [parent p] [label (symbol->string h-align)] [stretchable-width #f]))
(for-each test '(left center right))
(send frame show #t))
(module+ main
(example))
