Avatar billede sbk200 Nybegynder
14. august 2003 - 09:23 Der er 12 kommentarer og
1 løsning

Tegne med Java.

Hej. Jeg vil gerne tegne et system ved Java programmering. Systemet skal visualisere et fysisk tank system (ala: http://www.ida.liu.se/~her/npp/demo.html) med nogle tanke og rør der er forbundet til hinanden via ventiler osv.

Jeg vil gerne have det modul opbygget således at jeg eksempelvis har et rør modul, ventil modul osv. Tegningen skal på et senere tidspunkt vises som en applet. Da jeg er ret ny i Java programmering mangler jeg lidt hints til hvorledes jeg skal angribe opgaven evt. understøttet af links til tutorials/kode eksempler. Håber I kan hjælpe mig!!
Avatar billede mikkelbm Nybegynder
14. august 2003 - 11:40 #1
Her er nogle links, som jeg har fundet brugbare:

http://javabog.dk/
http://javabog.dk/vp/

Og så kan du hente kildekoden til den applet du henviser til:
http://www.ida.liu.se/~her/npp/description.html

Og suns egne toturials:
http://developer.java.sun.com/developer/onlineTraining/GUI/
http://java.sun.com/applets/

Håber det er brugbart...
Avatar billede sbk200 Nybegynder
14. august 2003 - 12:19 #2
Kender godt de sider du henviser til. Havde nok forestillet mig noget lidt mere specifikt til mit problem. Kan man evt. lave enhederne som Javabeans?
Avatar billede _carsten Nybegynder
20. august 2003 - 15:00 #3
Jeg ved ikke om du er kommet længere, så jeg har lavet et
lille eksempel som kan give dig en ide om hvordan du kan
komme videre.

Dette er med en JLabel som du i stedet for at tilføje tekst
kan indsætte et billede - det kunne være rør, ventiler etc.

Du kunne jo lave et knappanel bestående af forskellige moduler,
gøres nemmest ved at bruge min klasse 'Modul' og så bare initiere
'Modul' med stien til det billede der skal vises.

De 2 klasser kompileres hver for sig.


public class ModulTest extends javax.swing.JFrame {
   
    /** Creates new form ModulTest */
    public ModulTest() {
        initComponents();
        modul = new javadone.Modul();
        setSize(500,500);
        show();
        jPanel1.add(modul);
        jPanel1.paintComponents(jPanel1.getGraphics());;
       
       
    }
   

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

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

        jPanel1.setLayout(null);

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

        pack();
    }
   

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new ModulTest();
    }
   
   
    private javax.swing.JPanel jPanel1;
    private javadone.Modul modul;
}







// KLASSEN MODUL

import java.awt.event.*;

public class Modul extends javax.swing.JLabel {

    public Modul() {
        super("Flyt mig med musen");
        setBounds(100, 70, 140, 16);
        mouseListeners();
    }
   
    public Modul(String STIEN_TIL_VENTIL_BILLEDE){
        setIcon(new javax.swing.ImageIcon(STIEN_TIL_VENTIL_BILLEDE));
    }
   
    private void mouseListeners(){
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                first = true;
                dragMe(evt);
            }
        });
       
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
                public void mouseDragged(java.awt.event.MouseEvent evt) {
                    dragMe(evt);
                }
        });
    }
   
    private void dragMe(MouseEvent evt){
        mouseP = evt.getPoint();
        labelPos = getLocation();

            if(first){
                mouseFirstX = mouseP.getX();
                mouseFirstY = mouseP.getY();
            }
            mouseNowX = mouseP.getX();
            mouseNowY = mouseP.getY();

            oldPosX = labelPos.getX();
            oldPosY = labelPos.getY();
     
        setLocation((int)((oldPosX + mouseNowX) - mouseFirstX),
                    (int)((oldPosY + mouseNowY) - mouseFirstY) );
        first = false;
    }
   
    private java.awt.Point labelPos, mouseP ;
    private double  oldPosX, oldPosY,
                    mouseFirstX, mouseFirstY,
                    mouseNowX, mouseNowY;
    private boolean first = false;
}
Avatar billede _carsten Nybegynder
20. august 2003 - 19:21 #4
Jeg fik vist lavet en såkaldt BØF !!

Ret:  modul = new javadone.Modul();
Til:  modul = new Modul();
Avatar billede _carsten Nybegynder
20. august 2003 - 19:22 #5
Der var lige en mere.

Ret:        private javadone.Modul modul;
Til:        private Modul modul;
Avatar billede sbk200 Nybegynder
21. august 2003 - 17:48 #6
carsten -> Godt eksempel. Men jeg er egentlig mest interesseret i at kunne opbygge systemet i min Grafiske builder -> peger i retningen af at modulerne skal opbygges som Javabeans. Kunne man lave det lille tekst stykke om til en rektangel (så det forestiller et rør) med Graphics klassen og så resize og placere den i min grafiske builder ? .. Vil det være svært ?
Avatar billede _carsten Nybegynder
21. august 2003 - 18:47 #7
Tjaaa - tjooo

Men så skal man nok extende et JPanel i stedet for, mener ikke man
kan tegne i en JLabel.

Skal prøve at kigge på det i aften - men vil ikke love det !
Avatar billede _carsten Nybegynder
22. august 2003 - 23:00 #8
Har lavet klassen 'Modul' om så den ligner et rørmodul,
modulet kan resizes, når du flytter musen ind på modulet
kommer der røde 'håndtag' i hjørnerne og du kan trække
i hjørnerne med musen.
Røret en kun vandret - så må du selv køre videre herfra.
Koden kan sagtens forfines lidt endnu, men jeg GIDER ikke mere.

Brug nedenstående modul i stedet for det forrige.



import java.awt.event.*;

public class Modul extends javax.swing.JLabel {

    public Modul() {
        super();
        setBounds(100, 70, 140, 16);
        mouseListeners();
    }
   
    private void mouseListeners(){
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                locateMousePositionInLabel(evt);
                first = true;
            }
        });
       
        addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseEntered(java.awt.event.MouseEvent evt) {
                    mouseEnter = true;
                    repaint();
                }
        });
       
        addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseReleased(java.awt.event.MouseEvent evt) {
                    handle = "";
                }
        });
       
        addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseExited(java.awt.event.MouseEvent evt) {
                    mouseEnter = false;
                    repaint();
                }
        });
       
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
                public void mouseDragged(java.awt.event.MouseEvent evt) {
                    dragMe(evt);
                }
        });
       
       
    }
   
    private void locateMousePositionInLabel(MouseEvent evt){
        int x = evt.getX();
        int y = evt.getY();
       
        handle = "";
        if(y >= 0 && y <= 4)
            handle = "NORTH";
        if(y >= (getHeight() - 4) && y <= getHeight())
            handle = "SOUTH";
       
        if(x >= 0 && x <= 4)
            handle += "WEST";
        if(x >= (getWidth() - 4) && x <= getWidth())
            handle += "EAST";
    }
   
    private void resizeMe(MouseEvent e){
        mouseP = e.getPoint();
        labelPos = getLocation();
            if(first){
                mouseFirstX = mouseP.getX();
                mouseFirstY = mouseP.getY();
                endX = getWidth() - mouseFirstX + labelPos.getX();
                endY = getHeight() - mouseFirstY + labelPos.getY();
                firstX = labelPos.getX();
                firstY = labelPos.getY();
                oldWidth = getWidth();
                oldHeight = getHeight();
                first = false;
            }
       
        mouseNowX = mouseP.getX();
        mouseNowY = mouseP.getY();
        java.awt.Point PO = mouseP.getLocation();
        oldPosX = labelPos.getX();
        oldPosY = labelPos.getY();
       
        if(handle.equals("NORTHWEST")){
            setLocation((int)( (oldPosX + mouseNowX) - mouseFirstX),
                        (int)( (oldPosY + mouseNowY) - mouseFirstY) );
            setSize((int)(endX - oldPosX), (int)( endY - oldPosY));
        }
        else if(handle.equals("NORTHEAST")){
            oldHeight -= PO.getY();
            setLocation( (int)firstX, (int)(labelPos.getY() + PO.getY()  ));
            setSize((int)(mouseNowX - mouseFirstX + oldWidth) , (int)(oldHeight + mouseFirstY) );
        }
        else if(handle.equals("SOUTHEAST")){
            setLocation((int) firstX,(int)firstY );
            setSize((int)(oldWidth - mouseFirstX + mouseNowX ), (int)(oldHeight  - mouseFirstY + mouseNowY ));
        }
        else if(handle.equals("SOUTHWEST")){
            oldWidth -= PO.getX();
            setLocation((int) (labelPos.getX() + PO.getX()),(int)firstY );
            setSize((int)(oldWidth + mouseFirstX + mouseNowX ), (int)(oldHeight - mouseFirstY + mouseNowY ));
        }
    }
   
    private void dragMe(MouseEvent evt){
        mouseP = evt.getPoint();
        labelPos = getLocation();
               
        if(!handle.equals(""))
            resizeMe(evt);
        else{
            if(first){
                mouseFirstX = mouseP.getX();
                mouseFirstY = mouseP.getY();
            }
            mouseNowX = mouseP.getX();
            mouseNowY = mouseP.getY();

            oldPosX = labelPos.getX();
            oldPosY = labelPos.getY();
     
            setLocation((int)((oldPosX + mouseNowX) - mouseFirstX) ,
                        (int)((oldPosY + mouseNowY) - mouseFirstY) );
            first = false;
        }
    }
   
    public void paintComponent(java.awt.Graphics g){
        if (mouseEnter){
            g.setColor(java.awt.Color.RED);
            g.fillRect(0, 0, 4,4);
            g.fillRect(getWidth() - 4, getHeight() - 4, 4,4);
            g.fillRect(getWidth() - 4, 0, 4,4);
            g.fillRect(0, getHeight() - 4, 4,4);
        }

        g.setColor(java.awt.Color.BLACK);
        g.drawLine(0,getHeight() - 3, getWidth() - 0,getHeight() - 3);
        g.drawLine(0, 3, getWidth() - 0,3);  // Øverste linie 
    }
       
    private java.awt.Point labelPos, mouseP ;
    private double  oldPosX, oldPosY,
                    mouseFirstX, mouseFirstY,
                    mouseNowX, mouseNowY,
                    endX, endY,
                    newWidth, newHeight,
                    oldMouseX, oldMouseY,
                    oldWidth, oldHeight,
                    firstX, firstY;
    private boolean first = false;
    private boolean mouseEnter = false;
    private String handle = "";
}
Avatar billede sbk200 Nybegynder
23. august 2003 - 22:12 #9
_carsten -> Alt for fedt at du har brugt så meget tid på det !! Jeg har desværre ikke mulighed for at teste din kode i weekenden men glæder mig meget til at testen den mandag .. Vender tilbage der !!
Avatar billede sbk200 Nybegynder
27. august 2003 - 08:35 #10
Det ser godt ud _carsten. Der er helt klart noget inspiration til mig. Du løber med pointene.
Hvis jeg nu anvende rør stykket i min grafiske builder (netbeans eller jbuilder) har du så nogle hints til hvorledes man gør det ?
Avatar billede sbk200 Nybegynder
27. august 2003 - 08:36 #11
øhh.. giver gerne flere point for gode svar (glemte jeg lige at sige) :o)
Avatar billede _carsten Nybegynder
27. august 2003 - 11:48 #12
Kender ikke meget til JBuilder, men i netbeans kan bare bruge
'Add to Palette' så ligger den i paletten sammen med de andre
så som JTextField, JLabel etc.
Avatar billede _carsten Nybegynder
27. august 2003 - 12:02 #13
Hele opskriften:

1. Højreklik på classen 'Modul'
2. Vælg 'Tools'
3. 'Add To Component Palette'
4. Vælg Palette
5. OK

Så kan du trække den ned på samme måde som med en JLabel
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