If you can do Tic-Tac-Toe, then you are on your way to learn Java graphics.
An arcade shooter clone is more manageable if you have know the internals of Java graphics (ie Canvas class, how to draw images on the screen) some basic logic to make the enemies move independently or your character at your will, Rectangle class for collision detection). This is what I have been doing for 3 months by myself.
You must write good code to maintain the codebase of a game. The more features you add, the number of classes increase so good coding style is a must.
If you have enough experience with your programming language, I will say the arcade shooter clone will test how much you know about your language. I will say it is a good challenge. It will teach you programming skills no book can possibly do.
Before the arcade shooter clone, I knew an idea of what a Canvas was and how collision detection works. But when you start implementing it is even more cool!
I would say you can grab art online for educational purpose so you can speed up the game development process. Solving how to implement certain features in a game is more than enough on your plate. Keep the game simple enough that you can make the game happen. Challenge yourself when you have done implementing the simple features.
On a side note: Start using inheritance and polymorphism if you have not already done so. Inheritance and polymorphism is powerful! ArrayLists are awesome because they keep track of its size for you. Use them.