problème background(Color) en java

jeromejp

Membre confirmé
9 Juin 2009
57
3
Bonjour,

Voici un programme java qui affiche un calendrier. Problème : sous windows, les setBackground(Color) (une couleur en paramètre) marche bien, mais une fois sous mac, quénéni !
que faire ?

package cal;

import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Calendrier extends javax.swing.JPanel {

/**
*
*/
private static final long serialVersionUID = 1L;
private static final String[] jour = { "dim", "lun", "mar", "mer", "jeu", "ven", "sam"};
private static final String[] mois = {"janvier","fÈvrier","mars","avril","mai","juin","juillet","ao˚t","septembre","octobre","novembre","dÈcembre"};
private int annee;
private int nummois;
private int numjour;
private JPanel centre;

public Calendrier(){

this.setLayout(new BorderLayout());
JPanel n = new JPanel(new GridLayout(2,1));
n.add(ligne1());
n.add(ligne2());
this.add(n, "North");
centre=centre();
this.add(centre);

setCalendrier();
}

public JPanel ligne1() {
Calendar cal=new GregorianCalendar();

annee=cal.get(Calendar.YEAR);
nummois=cal.get(Calendar.MONTH);
numjour=cal.get(Calendar.DAY_OF_MONTH);
String m;
m=mois[nummois];

JPanel p1 = new JPanel (new GridLayout(1,4));

JButton flecheG = new JButton (new ImageIcon("flechegauche.gif"));
p1.add(flecheG);

JLabel l1 = new JLabel(m, JLabel.CENTER);
p1.add(l1);

JLabel l2 = new JLabel(Integer.toString(annee), JLabel.CENTER);
p1.add(l2);

JButton flecheD = new JButton (new ImageIcon("flechedroite.gif"));
p1.add(flecheD);

//flecheG.addActionListener(new Precedent());
//flecheD.addActionListener(new Suivant());

return p1 ;

}

JPanel ligne2(){
JPanel p2 = new JPanel (new GridLayout(1,7));
for(int i=0; i<jour.length; i++){
JLabel j= new JLabel(jour, JLabel.CENTER);
p2.add(j);
}
return p2;
}

JPanel centre(){
JPanel p3 = new JPanel (new GridLayout(0,7));

return p3;
}

private void setCalendrier() {
Calendar Cal = new GregorianCalendar(annee,nummois,1);
int n1p = Cal.get(Calendar.DAY_OF_WEEK);
int nbj = Cal.getActualMaximum(Calendar.DAY_OF_MONTH);
centre.removeAll();

for(int i=1; i<n1p;i++){
JButton b = new JButton();
b.setEnabled(false);
centre.add(b);

}


for (int i = 1; i <= nbj; i++) {
if(i==numjour){
JButton a = new JButton(Integer.toString(i));
a.setBackground(Color.red);
centre.add(a);
}else{
JButton j = new JButton(Integer.toString(i));
centre.add(j);
}

}
centre.validate();
centre.repaint();

}
}







ET :


package cal;

import javax.swing.*;


public class PPCalendrier extends JFrame{

/**
*
*/
private static final long serialVersionUID = 1L;

public PPCalendrier(){
this.setTitle("Calendrier");
this.setBounds(10,10,370,240);
Calendrier c = new Calendrier();
this.add(c, "Center");
this.setVisible(true);
}
public static void main(String[] args){
new PPCalendrier();
}

}




Pouvez vous m'aider ?

Merci d'avance

Jérôme
 
En fait, java prends le theme par defaut : aqua.
Donc il faut forcer java a prendre SON interface.
Ton main doit donc etre comme ceci :


package Semaine1;



import java.awt.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.metal.*;





@SuppressWarnings({ "serial", "unused"})
public class PPCalendrier extends Frame{
public PPCalendrier() throws UnsupportedLookAndFeelException{
UIManager.setLookAndFeel(new MetalLookAndFeel());
this.setTitle("Calendrier");
this.setBounds(10,10,600,600);
ImageIcon gauche = new ImageIcon("icones/flechegauche.gif");
ImageIcon droite = new ImageIcon("icones/flechedroite.gif");
Calendrier cal = new Calendrier(gauche, droite);
cal.setDate(16,11,1991);
this.add(cal);
this.setVisible(true);
}
public static void main(String[] args) throws UnsupportedLookAndFeelException{
new PPCalendrier();
}
}


Sinon jeromejp, tu ne serais pas de l'iut de lannion??
Ca ressemble fortement à notre TD de cette semaine bizarrement ^^
 
les JButtons sont moins esthétiques.... :(

C'est le look&field en java c'est normal, on ne peut pas avoir le beurre et l'argent du beurre à moins de mettre la main dans le cambouis donc faut savoir ce qu'on veut. Par contre l'avantage de ce look&field c'est qu'il est quasiment identique sous tous les OS :p :D :D
 
Réaction typique de l'utilisateur Mac :p :D :D

Plus sérieusement le look&field par défaut des swing n'est certes pas le plus jolie existant mais dire qu'il est à gerber c'est un peu fort parce que pour faire du multi-plateforme il permet au moins d'avoir des IHM homogènes et identiques (à quelques choses spécifiques près) sur tous les OS. :p :D :D
 
[Vezøul]Numerø41;5230129 a dit:
Réaction typique de l'utilisateur Mac :p :D :D

Plus sérieusement le look&field par défaut des swing n'est certes pas le plus jolie existant mais dire qu'il est à gerber c'est un peu fort parce que pour faire du multi-plateforme il permet au moins d'avoir des IHM homogènes et identiques (à quelques choses spécifiques près) sur tous les OS. :p :D :D

et c'est bien la l'erreur monumental de gout des designers, toutefois c'est tres orienté windows MCF, cependant, pendant longtemps des desktops comme Gnome n'ont fait que cloner windows et c'etait pitoyable, quand on voit ce qu'est capable de faire real-basic meme si le language suce ca prouve qu on peut faire du cross respectant le look and feel de l'OS et mieux encore la logique de l'interface (ce qui est l'erreur la plus fondamentale en design)

meme QNX c'est plus beau que Swing ...