12. november 2003 - 14:03Der er
18 kommentarer og 1 løsning
JLabel med Icon cirkel
Jeg har en JLabel label, hvor jeg skal have lavet en cirkel, og det skal laves sådan at det er rimeligt nemt at ændre farven på cirklen vha. forskellige knapper. Hvordan laver jeg det Icon som skal være argumentet i new JLabel()?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg har lavet det sådan, at jeg har lavet en klasse der hedder CircelIcon som implementerer Icon. Ved du så evt. hvordan jeg skifter farven i dette tilfælde?
private java.awt.Color color = java.awt.Color.GREEN;
// Og i din actionListener som er tilknyttet din knap // ændrer du farven på din color variabel og kalder paintIcon(). // Nærmere kommer jeg det ikke udfra den kode jeg har set indtil nu.
public void paintIcon(Component c, Graphics g, int x, int y){ g.setColor(color);
Den rigtige/nemme måde at gøre det på er måske at smide en reference med over fra din main klasse til klassen som implementerer Icon, og lave farve justering i knappens actionListener, noget a la nedenstående.
public class MinMain{ private java.awt.Color color = java.awt.Color.GREEN;
knap.acctionListener............ ......... }
public class ClassSomImplIcon implements Icon{ private MinMain main;
public ClassSomImplIcon(MinMain main){ this.main = main; }
public void paintIcon(Component c, Graphics g, int x, int y){ g.setColor(main.color);
/** * @author Søren Soltveit * @version 12-11-03 */ public class ChangeColor { //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Definerer en klassevariabel, aktuelle farve public java.awt.Color color = java.awt.Color.RED;
public Component createComponents() { //opretter knapper JButton buttonRed = new JButton("Rød"); JButton buttonBlue = new JButton("Blå"); JButton buttonGreen = new JButton("Grøn");
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Tilføjet et argement mere til konstuktøren i din // CircelIcon klasse, således at overfører en reference // til denne klasse, altså 'this' //opretter label final Icon icon = new CircelIcon(20, this); final JLabel label = new JLabel( icon );
//opretter panel og tilføjer indhold JPanel panel = new JPanel(); panel.setLayout( new GridLayout(0, 3) ); panel.add( buttonRed ); panel.add( buttonBlue ); panel.add( buttonGreen ); panel.add( label );
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Se knappers actionListeners //opretter actionsListeners til knapperne buttonRed.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { color = Color.RED; label.repaint(); } });
buttonBlue.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { color = Color.BLUE; label.repaint(); } });
buttonGreen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { color = Color.GREEN; label.repaint(); } });
/** * @author * @version 12-11-03 */ public class CircelIcon implements Icon { private int width; private Color color; // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Reference til main klasse private ChangeColor chColor;
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Tilføjet et argument til klassen som kalder denne klasse public CircelIcon(int aWidth, ChangeColor chColor) { this.chColor = chColor; width = aWidth; color = Color.RED; }
public int getIconWidth() { return width; }
public int getIconHeight() { return width / 2; }
public void setColor(Color c) { color = c; }
public void paintIcon(Component c, Graphics g, int x, int y) { // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // Henter aktuelle farve din main klasse/parent color = chColor.color; Graphics2D g2 = (Graphics2D) g; Ellipse2D.Double ellipse = new Ellipse2D.Double(x,y, width, width); g2.setColor( color ); g2.fill( ellipse ); } }
Jeg fandt selv en lidt simplere løsning. Problemet var følgende kode "final Icon icon = new CircelIcon( 20 );" Men det skulle istedet være "final CircelIcon icon = new CircelIcon( 20 );" Metoden setColor findes jo ikke i "Icon"
Men ellers tak for indsatsen, så du får pointne :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.