Avatar billede pblv Nybegynder
05. september 2003 - 09:00 Der er 3 kommentarer og
1 løsning

Transperant billede

Hey,

Kan jeg tegne et transperant billede, f.eks. en stjerne, så jeg kan ændre farven inden i stjernen, ved hjælp af en JColorChooser?
Avatar billede _carsten Nybegynder
05. september 2003 - 10:36 #1
Et lille eksempel, nu har jeg brugt en firkant(var hurtigere end at lave
en stjerne), men fremgangsmåden er sådan set den samme.

import java.awt.Graphics;
import javax.swing.JColorChooser;

public class ColorChooser extends javax.swing.JFrame {
   
    public ColorChooser() {
        initComponents();
        setSize(300,300);
    }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jButton1.setText("Skift farve");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newColor = JColorChooser.showDialog(this,
                                                    "Vælg en farve",
                                                    newColor);}
        });

        jPanel1.add(jButton1);

        getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

        pack();
    }

   
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public void paint(Graphics g){
        super.paintComponents(g);
        g.drawRect(100,100, 100,100);
        if(newColor != null){
            g.setColor(newColor);
            g.fillRect(100,100, 100,100);
        }
    }

    public static void main(String args[]) {
        new ColorChooser().show();
    }
   
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private java.awt.Color newColor;
}
Avatar billede pblv Nybegynder
05. september 2003 - 11:00 #2
Hey _carsten.

Den giver følgende fejl
"ColorChooser.java": Error #: 300 : method showDialog(untitled21.ColorChooser.initComponents.2, java.lang.String, java.awt.Color) not found in class javax.swing.JColorChooser at line 26, column 42

Jeg har sådan set lavet sådan en som dig selv. Grunden til at jeg spørger, er at jeg ville lave en trøje, som det var muligt at ændre farven på. Problemet er bare, at det jo ikke lige er sådan til at opbygge en trøje af firkanter osv, så derfor ville jeg høre om man ikke kunne tegne en "skitse", eller omrids om man vil, og have den som f.eks. jpg, og fylde farven ud i den?
Avatar billede ng-km Nybegynder
05. september 2003 - 19:28 #3
Du kan jo bare opbygge og definere din trøje som en Polygon, og så indlæse den på din Graphics. Et Polygon-objekt kan opbygges helt som du ønsker det.
Avatar billede _carsten Nybegynder
08. september 2003 - 20:32 #4
Har tilladt mig at tage et fridage fra computeren, men er tilbage.
Du har ret - den giver fejl når den kaldes inden objectet er initieret.
Jeg har lavet lidt om på min klasse, og tegnet den grimmeste trøje
der længe er set i designer verdenen, men den viser vel ideen.


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

public class Shirt extends JFrame {

    public Shirt() {
        initComponents();
        setSize(400,400);
    }
   

    private void initComponents() {
        jPanel1 = new JPanel();
        jButton1 = new JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jPanel1.setLayout(new java.awt.BorderLayout());

        jButton1.setText("V\u00e6lg farve p\u00e5 tr\u00f8jen");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                draw(evt);
            }
        });

        jPanel1.add(jButton1, java.awt.BorderLayout.NORTH);
        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
        pack();
    }

    private void draw(java.awt.event.ActionEvent evt) {
        newColor = JColorChooser.showDialog(this, "Vælg en farve", newColor);
        g2d.setColor(newColor); 
    }
   

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public void paint(java.awt.Graphics g){
        if(offscreen == null) {
            offscreen = (java.awt.image.BufferedImage)
                        jPanel1.createImage(1200, 1200);
            g2d = offscreen.createGraphics();
            int[] x = {150,115,140,162,163,240,238,262,285,245};
            int[] y = {150,240,250,185,250,250,185,250,240,150};
            if( p == null){
                p = new Polygon(x,y, x.length);
                g2d.setColor(java.awt.Color.BLACK);
                g2d.drawPolygon(p);
            }
        }
        if(!initiate)
            g2d.fillPolygon(p);
        initiate = false;
        g.drawImage(offscreen, 0, 0, jPanel1);
        jPanel1.paintComponents(jPanel1.getGraphics());
    }

    public static void main(String args[]) {
        new Shirt().show();
    }
   
   
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private java.awt.image.BufferedImage offscreen;
    private java.awt.Graphics2D g2d;
    private Polygon p = null;
    private java.awt.Color newColor;
    private boolean initiate = true;
}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester