JInternalFrame

4 respostas
A

Preciso de uma ajuda…

estou com essa classe e gostaria de transforma-la em uma classe "JInternalFrame " pra q outra janela a chame pelo menu…
ja tenho um programa principal q esta chamado através de um menu outras classes q são "JInternalFrame ".
Eu fiz um teste, alterei essa classe pra uma casse "JInternalFrame ", mas qndo eu a chamo pelo menu na classe principal, ela ñ aparece.

alguém pode me ajudar?


import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.geom.AffineTransform;

import javax.swing.JComponent;

import javax.swing.JFrame;

public class Teste extends JComponent {

Retangulo[] rects = new Retangulo[] {
   // new Retangulo(100, 100, 50, 50, 1),
    new Retangulo(100, 500, 95, 95, 1),
   // new Retangulo(500, 100, 95, 50, 1),
   // new Retangulo(500, 500, 50, 95, 1)
};

int selection = 0;

public Teste() {
    Controller controller = new Controller();
    addMouseListener(controller);
    addMouseMotionListener(controller);
}

protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
   
    g2.setColor(Color.BLUE);
    for (int i=0; i<rects.length; i++) {
        Retangulo r = rects[i];
       
        int x = r.cx - (r.width/2);
        int y = r.cy - (r.height/2);
       
        AffineTransform original = g2.getTransform();
       
        AffineTransform trans = new AffineTransform(original);
        trans.translate(r.cx, r.cy);
        trans.rotate(r.rotation);
        trans.translate(-r.cx, -r.cy);
       
        g2.setTransform(trans);
        g2.fillRect(x, y, r.width, r.height);
       
        g2.setTransform(original);
    }
}

private class Controller extends MouseAdapter implements MouseMotionListener {
    int x, y;
   
    public void mousePressed(MouseEvent evt) {
        selection = (selection + 1) % rects.length;
        x = evt.getX();
        y = evt.getY();
    }
    public void mouseDragged(MouseEvent evt) {
        rects[selection].rotation += ((double) evt.getX() - x) / 10;
       
        x = evt.getX();
        y = evt.getY();
        repaint();
    }
   
    public void mouseMoved(MouseEvent evt) {}
}

public static void main(String[] args) {
    Teste t = new Teste();
   
    JFrame f = new JFrame();
    f.setSize(640,480);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(new BorderLayout());
   
    f.add(t, BorderLayout.CENTER);
   
    f.setVisible(true);
}

}

class Retangulo {

int cx, cy, width, height;

double rotation;

Retangulo() {

rotation=cx=cy=width=height=0;

}
Retangulo(int cx, int cy, int width, int height, double rotation) {
    this.cx = cx;
    this.cy = cy;
    this.width = width;
    this.height = height;
    this.rotation = rotation;
}

}>

4 Respostas

christianovale

Primeiramente sua classe dever estender de JInternalFrame:

public class Teste extends JInternalFrame

ja tenho um programa principal q esta chamado através de um menu outras classes q são "JInternalFrame ".
Eu fiz um teste, alterei essa classe pra uma casse "JInternalFrame ", mas qndo eu a chamo pelo menu na classe principal, ela ñ aparece.

Outro detalhe os JInternalFrame so aparecem dentro de JDesktopPane, ou seja, sua classe principal deve ser um JDesktopPane

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JDesktopPane.html
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JInternalFrame.html
http://www.guj.com.br/posts/list/15555.java

A

Bom…
eu fiz um teste nessa classe…
eu alterei ela para estender de JInternalFrame:

e meu programa principal ja é um JDesktopPane
inclusive tenho mais outras classes q são JInternalFrame e aparecem no programa principal normalmente…

E

fiz um teste rapido aqui e funcionou veja

sua classe sem o metodo main

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.geom.AffineTransform;

import javax.swing.JComponent;

import javax.swing.JFrame;

public class Teste extends JComponent {

Retangulo[] rects = new Retangulo[] {

// new Retangulo(100, 100, 50, 50, 1),

new Retangulo(100, 500, 95, 95, 1),

// new Retangulo(500, 100, 95, 50, 1),

// new Retangulo(500, 500, 50, 95, 1)

};

int selection = 0;

public Teste() {

Controller controller = new Controller();

addMouseListener(controller);

addMouseMotionListener(controller);

}

protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

g2.setColor(Color.BLUE);

for (int i=0; i<rects.length; i++) {

Retangulo r = rects[i];

int x = r.cx - (r.width/2);
int y = r.cy - (r.height/2);

AffineTransform original = g2.getTransform();

AffineTransform trans = new AffineTransform(original);

trans.translate(<a href="http://r.cx">r.cx</a>, <a href="http://r.cy">r.cy</a>);

trans.rotate(r.rotation);

trans.translate(-r.cx, -r.cy);

g2.setTransform(trans);
g2.fillRect(x, y, r.width, r.height);

g2.setTransform(original);

}

}

private class Controller extends MouseAdapter implements MouseMotionListener {
int x, y;

public void mousePressed(MouseEvent evt) {

selection = (selection + 1) % rects.length;

x = evt.getX();

y = evt.getY();

}

public void mouseDragged(MouseEvent evt) {

rects[selection].rotation += ((double) evt.getX() - x) / 10;
x = evt.getX();

y = evt.getY();

repaint();

}

public void mouseMoved(MouseEvent evt) {}
}

}

class Retangulo {

int cx, cy, width, height;

double rotation;

Retangulo() {

rotation=cx=cy=width=height=0;

}
Retangulo(int cx, int cy, int width, int height, double rotation) {

<a href="http://this.cx">this.cx</a> = cx;

<a href="http://this.cy">this.cy</a> = cy;

this.width = width;

this.height = height;

this.rotation = rotation;

}

}

a seguir uma classe principal que ja tinha pronta

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.<em>;

import javax.swing.event.</em>;
public class TFrame extends JFrame implements InternalFrameListener, ActionListener,ItemListener {

JButton btn1, btn2, btn3;

JDesktopPane desktop;

JInternalFrame win1;

JInternalFrame win2;

JInternalFrame win3;

JCheckBox checkbox;

boolean recurso;
public TFrame() {
    super("Teste");
    desktop = new JDesktopPane();
    desktop.putClientProperty("JDesktopPane.dragMode","outline");
    setContentPane(desktop);
desktop.setLayout(null);
JPanel pane = new JPanel();
pane.setLayout(null);
btn1 = new JButton("Abrir Janela 1");
btn2 = new JButton("Abrir Janela 2");
btn3 = new JButton("Abrir Janela 3");
checkbox = new JCheckBox("Desabilitar botões quando clicar",true); 
recurso = true;
checkbox.addItemListener(this);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
pane.setBounds(0,0,200,500);
btn1.setBounds(20,20,150,22);
btn2.setBounds(20,47,150,22);
btn3.setBounds(20,74,150,22);
checkbox.setBounds(10,101,180,40);
pane.add(btn1);
pane.add(btn2);
pane.add(btn3);
pane.add(checkbox);
desktop.add(pane);
    }

public void internalFrameClosing(InternalFrameEvent e) {
    
}

public void internalFrameClosed(InternalFrameEvent e) {
    enableBtns(true);
}

public void internalFrameOpened(InternalFrameEvent e) {
   
}

public void internalFrameIconified(InternalFrameEvent e) {
    
}

public void internalFrameDeiconified(InternalFrameEvent e) {
    
}

public void internalFrameActivated(InternalFrameEvent e) {
    
}

public void internalFrameDeactivated(InternalFrameEvent e) {
    
}
private void enableBtns(Boolean v){
	btn1.setEnabled(v);
	btn2.setEnabled(v);
	btn3.setEnabled(v);
}

public void itemStateChanged(ItemEvent e) {
	
	if (e.getStateChange() == ItemEvent.DESELECTED)
		recurso = false;
	else	
		recurso = true;
        }


public void actionPerformed(ActionEvent e) {
if (recurso)
	enableBtns(false);

    if (e.getSource().equals(btn1)){
	btn1.setEnabled(false);
	Teste t = new Teste(); 
	win1 = new JInternalFrame("Janela 1", true, true, true, true); 
    	win1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	win1.setLayout(new BorderLayout()); 
	win1.add(t, BorderLayout.CENTER); 
	win1.addInternalFrameListener(this);
        win1.setSize(640,480);
	win1.setLocation(200,0);
	desktop.add(win1);
	win1.show();
} else if(e.getSource().equals(btn2)){
	btn2.setEnabled(false);
	win2 = new JInternalFrame("Janela 2", true, true, true, true); 
    	win2.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	win2.addInternalFrameListener(this);
        win2.setSize(400, 150);
	win2.setLocation(200,100);
	desktop.add(win2);
	win2.show();
} else {
	btn3.setEnabled(false);		
	win3 = new JInternalFrame("Janela 3", true, true, true, true); 
    	win3.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	win3.addInternalFrameListener(this);
        win3.setSize(500, 200);
	win3.setLocation(200,300);
	desktop.add(win3);
	win3.show();
}

}

public static void main(String[] args) {
    JFrame frame = new TFrame();

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

    frame.setSize(800, 600);
    frame.setVisible(true);
}

}

Otata

e ae pessoal aproveitando…

eu fiz um programinha que tem uns menus que chamam janela internas, mas quando elas abrem elas nao tem foco… e a imagem que esta de fundo fica em cima da janela interna…alguem poderia me ajudar?

Valeu!!

Criado 1 de junho de 2006
Ultima resposta 27 de jun. de 2006
Respostas 4
Participantes 4