Frage

Ich habe ein JInternalFrame mit einem BufferedImage gemalt und in der JDesktopPane eines JFrame enthalten. Ich habe auch eine JTextArea, wo ich will einige Java-Code (Funktion) schreiben, die den aktuellen JInternalFrame gemalte BufferedImage als Eingabe nimmt und nach an diesem Eingang eine gewisse Manipulation tun es wieder eine andere manipuliert BufferedImage, dass Farben die JInternalFrame mit neuen manipuliertes Bild zurück.

Manipulation Java-Code von JTextArea : -

public BufferedImage customOperation(BufferedImage CurrentInputImg) 
{    
    Color colOld;
    Color colNew;

    BufferedImage manipulated=new BufferedImage(CurrentInputImg.getWidth(),CurrentInputImg.getHeight(),BufferedImage.TYPE_INT_ARGB);

    // make all Red pixels of current image black 
    for(int i=0;i< CurrentInputImg.getWidth();i++) {
        for(int j=0;j< CurrentInputImg.getHeight(),j++) { 
            colOld=new Color(CurrentInputImg.getRGB(i,j));
            colNew=new Color(0,colOld.getGreen(),colOld.getBlue(),colOld.getAlpha());
            manipulated.setRGB(i,j,colNew.getRGB());
        } 
    }

    return manipulated;
}

Wie kann ich laufen / kompilieren diese JTextArea Java-Code zur Laufzeit und eine neue manipuliertes Bild für die Malerei auf JInternalFrame?

Hier ist meine Hauptklasse:

(Diese Klasse ist nicht unbedingt ein, aber ich habe es für den Grund für Sie erstellt eine Schnittstelle enthält JTextArea, JInternalFrame, Anwenden-Button)

import java.awt.*;    
import java.awt.event.*;    
import javax.swing.*;    
import javax.swing.event.*;    
import javax.swing.JInternalFrame;    
import javax.swing.JDesktopPane;    
import java.awt.image.*;    
import javax.imageio.*;    
import java.io.*;    
import java.io.File;    
import java.util.*;

class MyCustomOperationSystem extends JFrame    
{

    public JInternalFrame ImageFrame;     
    public BufferedImage CurrenFrameImage;

    public MyCustomOperationSystem() {
        setTitle("My Custom Image Operations");
        setSize((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());

        JDesktopPane desktop=new JDesktopPane();
        desktop.setPreferredSize(new Dimension((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()));

        try {
            CurrenFrameImage=ImageIO.read(new File("c:/Lokesh.png"));
        }catch(Exception exp) {
            System.out.println("Error in Loading Image");
        }

        ImageFrame=new JInternalFrame("Image Frame",true,true,false,true);
        ImageFrame.setMinimumSize(new Dimension(CurrenFrameImage.getWidth()+10,CurrenFrameImage.getHeight()+10));
        ImageFrame.getContentPane().add(CreateImagePanel());
        ImageFrame.setLayer(1);
        ImageFrame.setLocation(100,100);
        ImageFrame.setVisible(true);  
        desktop.setOpaque(true);
        desktop.setBackground(Color.darkGray);
        desktop.add(ImageFrame);
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add("Center",desktop);
        this.getContentPane().add("South",ControlPanel());
        pack();
        setVisible(true);
    }

    public JPanel CreateImagePanel() {
        JPanel tempPanel=new JPanel() {
            public void paintComponent(Graphics g) {
                g.drawImage(CurrenFrameImage,0,0,this);
            }
        };

        tempPanel.setPreferredSize(new Dimension(CurrenFrameImage.getWidth(),CurrenFrameImage.getHeight()));
        return tempPanel;
    }

    public JPanel ControlPanel() {
        JPanel controlPan=new JPanel(new FlowLayout(FlowLayout.LEFT));
        JButton customOP=new JButton("Custom Operation");

        customOP.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evnt) {
                JFrame CodeFrame=new JFrame("Write your Code Here");
                JTextArea codeArea=new JTextArea("Your Java Code Here",100,70);
                JScrollPane codeScrollPan=new JScrollPane(codeArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
                CodeFrame.add(codeScrollPan);
                CodeFrame.setVisible(true);
            }
        });

        JButton Apply=new JButton("Apply Code");

        Apply.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event){

             // What should I do!!! Here!!!!!!!!!!!!!!!

            }
        });

        controlPan.add(customOP);
        controlPan.add(Apply);
        return controlPan;
    }

    public static void main(String s[]) {
        new MyCustomOperationSystem();
    }
}

Hinweis: in der obigen Klasse JInternalFrame (Imageframe) ist nicht sichtbar, obwohl ich es sichtbar erklärt. So ist Imageframe nicht sichtbar beim Kompilieren und die obige Klasse ausgeführt wird. Sie haben dieses Problem zu identifizieren, bevor sie ausgeführt wird.

War es hilfreich?

Lösung

Werfen Sie einen Blick auf die Java 6 Compiler API

Andere Tipps

Wenn Sie aus Java tatsächlich kompilieren Code-wollen, ist es machbar, aber nicht trivial.

Es ist viel besser, einen Scripting Framework wie Groovy zu verwenden - das wäre großartig arbeiten. Groovy ist sehr Java-kompatibel ist, wird es fast immer Java-Code läuft direkt (es gibt ein paar seltsamen Ausnahmen)

Beanshell ist ein weiteres Scripting-Framework.

Diese beiden tun genau das, was Sie ohne den Aufwand wollen, um herauszufinden, zu versuchen, wie eine Klasse zu kompilieren, dann laden Sie sie in Ihre bestehende Laufzeit. (Eigentlich ist das Problem, das ich gesehen habe, ist nicht die anfängliche Kompilierung, es Spülung Ihre Klasse, so dass Sie es mit einem neuen nach einer Bearbeitung ersetzen können).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top