JFrame boutons qui changent de couleur d'arrière-plan de la fenêtre
Je suis en train de faire un programme avec des boutons, que lorsque vous cliquez sur eux, changer la couleur d'arrière-plan de l'image
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ColorFrame {
public static void main(String[] args){
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(300, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JButton redButton = new JButton ("Red");
final JButton greenButton = new JButton ("Green");
final JButton blueButton = new JButton ("Blue");
class Listener extends JPanel implements ActionListener{
public void actionPerformed(ActionEvent event) {
Color color;
if (event.getSource() == redButton){
color = Color.red;
} else if (event.getSource() == greenButton){
color = Color.green;
} else {
color = Color.blue;
}
setBackground(color);
System.out.println(color);
repaint();
}
}
redButton.addActionListener(new Listener());
greenButton.addActionListener(new Listener());
blueButton.addActionListener(new Listener());
panel.add(new JButton ("Red"));
panel.add(new JButton ("Green"));
panel.add(new JButton ("Blue"));
frame.add(panel);
}
}
Pourtant, quand je clique sur les boutons, rien ne semble se produire, et je pense qu'il pourrait avoir quelque chose à voir avec les auditeurs de ne pas être activé pour des raisons
Vous devez vous connecter pour publier un commentaire.
Vous définissez les boutons ici:
Mais ensuite, vous ajoutez entièrement de nouveaux boutons à la réelle panneau de sorte que les boutons avec les auditeurs connectés sont jamais ajouté:
Vous devez ajouter les boutons comme ceci:
redButton.setBackground()
ougreenButton.setBackground()
.setBackground
(dans ce contexte) permettra de définir les "images d'arrière-plan". Le cadre a unJRootPane
sur elle, qui, comme unJLayerdPane
sur elle, qui a un "volet de contenu", qui finalement a l'OP de panneau de sur de que. Ainsi, alors que l'image de la couleur d'arrière-plan peut être en train de changer, il n'y a aucun moyen qu'il ne serait jamais possible que l'utilisateur sera en mesure de le voir. Au lieu de cela, ils devraient changer la couleur de laJPanel
qu'ils placent sur le volet de contenu...+1 par la route 😉Prendre un moment pour visualiser le programme d'installation vous...
Vous avez un
JFrame
. Cette fenêtre a uneJRootPane
, qui contient unJLayerdPane
, qui contient un "volet de contenu".Le volet de contenu est généralement le plus haut niveau de la composante de base de la fenêtre.
À cela, vous ajoutez un
JPanel
.JPanel
est opaque par défaut. Par défaut, le volet de contenu utilise unBorderLayout
, cela signifie que rien n'est ajouté à la position par défaut sera placé dans leCENTER
position, le remplissage de l'espace disponible...Cela signifie, que vous cadre est recouvert par un
JLayeredPane
, volet contenu ET votreJPanel
.setBackground
ne pas déléguer à la fenêtre de contenu comme les autres méthodes, mais, dans votre cas, il ne serait pas l'aider, comme leJPanel
vous ajoutez est maintenant couvrant...En plus de LadyRacheya suggestions, vous avez deux choix.
Vous pouvez faire la
JPanel
transparent...Et changer la couleur d'arrière-plan de la fenêtre de contenu...
OU vous pouvez simplement changer la couleur de fond de la
JPanel
....Essayez ceci: