1) I have a JScrollPane that contains a JPanel with a CardLayout,
good GUI design for various screens ratio in pixels and ready for crossplatfom +1 for question
2) I want the contents of the ScrollPane/ViewPort to never exceed the width of the viewport.
basically that's contraproductive in contex that you put content to the JScrollPane,
sure you can set FontMetrics depends of available space on the screen returns from JViewport, but required to add more logics to used LayoutManager, not easy job, but is pretty possible, this is real issue for most of crossplatform applications
3) Is there a way of forcing a max size for the scrollpane or something so its contens never gets larger that the scrollspanes horizontal width?
no don't do it, because used LayotManager couldn't works correctly, recalculating JComponents size, FontMetrics shouldn't works too, every those parameters came from used LayoutManager
maybe is time to look for todays LayoutManager as f.e. MigLayout is,