Il look&Feel serve di base a cambiare aspetto al JFrame e non solo infatti prova questa classe ( costruita grazie anche all'aiuto di pireda ):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ProgressBarDemo extends JFrame {
public final static int ONE_SECOND = 1000;

private JProgressBar progressBar;
private Timer timer;
private JButton startButton;
private LongTask task;
private JTextArea taskOutput;
private String newline = "\n";
NomeClasse contentPane = new NomeClasse();

public ProgressBarDemo() {
super("ProgressBarDemo");
task = new LongTask();

//Create the demo's UI.
startButton = new JButton("Start");
startButton.setActionCommand("start");
startButton.addActionListener(new ButtonListener());

progressBar = new JProgressBar(0, task.getLengthOfTask());
progressBar.setValue(0);
progressBar.setStringPainted(true);

taskOutput = new JTextArea(5, 20);
taskOutput.setMargin(new Insets(5,5,5,5));
taskOutput.setEditable(false);

JPanel panel = new JPanel();
panel.add(startButton);
panel.add(progressBar);


contentPane.setLayout(new BorderLayout());
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(new JScrollPane(taskOutput), BorderLayout.CENTER);
contentPane.setBorder(BorderFactory.createEmptyBor der(20, 20, 20, 20));
setContentPane(contentPane);

//Create a timer.
timer = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
progressBar.setValue(task.getCurrent());
taskOutput.append(task.getMessage() + newline);
taskOutput.setCaretPosition(
taskOutput.getDocument().getLength());
if (task.done()) {
Toolkit.getDefaultToolkit().beep();
timer.stop();
startButton.setEnabled(true);
progressBar.setValue(progressBar.getMinimum());
}
}
});
}

/**
* The actionPerformed method in this class
* is called when the user presses the start button.
*/
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
startButton.setEnabled(false);
task.go();
timer.start();
}
}

public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new ProgressBarDemo();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

frame.pack();
frame.setVisible(true);
}
}
class NomeClasse extends JPanel
{
public NomeClasse()
{

//Setto l'ambientazione
//String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFee l";
String plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFee l";
//String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";
try
{
UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(NomeClasse.th is);
}
catch(Exception e)
{
//non voglio messaggi d'eccezione
}

}
}

Con la scritta segnata in rosso si cambia l'aspetto a TUTTI i frame che saranno richiamati dal main, col pezzo di codice in blu, invece, si cambia l'aspetto al pannello contenuto nel frame.prova a cambiare il valore di plaf commentando e decommentando altre stringhe e vedrai..
Per quanto riguarda un libro, io molto l'ho imparato dal sito della mokabyte
Ciao