She's good at tennis but bad at swimming.

Literal

She [topic-は] tennis [contrast-は] skilled [but-が], swimming [contrast-は] unskilled is.

The は...は contrastive structure is one of Japanese's most characteristic patterns: two parallel topics, each with its own predicate, set up against each other. Here both テニスは and 水泳は are contrastive topics — fronting two domains and asserting opposite skill levels. うまい (i-adjective 'skilled') is the casual counterpart to the more formal 上手 (na-adjective); for everyday speech they're roughly interchangeable, with 上手 carrying a slightly more polished feel. 下手 ('unskilled') is the standard antonym and pairs equally with both.