次の例は、実行したいことを示していますが、アイコンではなくテキストを使用しています。プログラムは、画像、テキスト、または表示するものを切り替えます。
JLabel を使用した理由がフラット ボタンが必要だった場合は、次のコードを追加できます。
private void makeButtonFlat(final JButton makeMeAFlatButton) {
makeMeAFlatButton.setOpaque(false);
makeMeAFlatButton.setFocusPainted(false);
makeMeAFlatButton.setBorderPainted(false);
makeMeAFlatButton.setContentAreaFilled(false);
makeMeAFlatButton.setBorder(BorderFactory.createEmptyBorder());
}
からこれを呼び出します
public void makeLayout() {
makeButtonFlat(playButton);
add(playButton);
}
これは JLabel のように見えますが、より論理的なボタンとして機能します。
コードスニペット:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Playful {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Playful");
JPanel playPanel = new PlayPanel();
frame.getContentPane().add(playPanel, BorderLayout.CENTER);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(400, 250));
frame.setLocationRelativeTo(null); // Center
frame.pack();
frame.setVisible(true);
}
});
}
static class PlayPanel extends JPanel {
enum State {
PLAY,
PAUSE;
public State toggle() {
switch (this) {
case PLAY:
return PAUSE;
case PAUSE:
return PLAY;
default:
throw new IllegalStateException("Unknown state " + this);
}
}
}
private State state;
private JButton playButton;
private ActionListener playActionListener;
PlayPanel() {
createComponents();
createHandlers();
registerHandlers();
makeLayout();
initComponent();
}
public void createComponents() {
playButton = new JButton();
}
public void createHandlers() {
playActionListener = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
toggleState();
}
});
}
};
}
public void registerHandlers() {
playButton.addActionListener(playActionListener);
}
public void makeLayout() {
add(playButton);
}
public void initComponent() {
state = State.PAUSE;
updatePlayButton();
}
private void toggleState() {
state = state.toggle();
updatePlayButton();
}
private void updatePlayButton() {
playButton.setText(state.name());
}
}
}