Estou a procura da melhor forma de se fazer um programa com mais de uma janela. Eu tenho uma janela principal, no menu dessa janela eu tenho um item “configurações” que deve abrir uma outra janela. Esta janela que será aberta contem configurações irão refletir na janela principal. Qual a melhor forma de fazer isso? A nova janela será um JFrame? Eu devo criar uma instancia da janela secundaria na janela principal? Devo criar um método “getConfiguracoes” na janela secundária para obter os valores?
Pesquise sobre InternalFrame.
Criei um JFrame no item de menu configuracao na acao do item ele cria um InternalFrame e adiciona a um JDesktopPane…
Bom pesquise sobre isso que vai te ajudar a resolver o seu problema…
dando + consistência á resposta do correainfo, adiciona o jframe, depois o desktop, e dentro do desktop vai inserindo os internalframes, dentro deles os outros elementos e dpx é só definires a forma como keres k eles apareçam
Olá
Como nossos colegas falaram, concordo com eles e queria postar um exemplo.
import javax.swing.JInternalFrame;
import javax.swing.JDesktopPane;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JFrame;
import java.awt.event.*;
import java.awt.*;
public class JInternalFrameDemo extends JFrame {
JDesktopPane jdpDesktop;
static int openFrameCount = 0;
public JInternalFrameDemo() {
super("JInternalFrame Usage Demo");
// Make the main window positioned as 50 pixels from each edge of the
// screen.
int inset = 50;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset, screenSize.width - inset * 2,
screenSize.height - inset * 2);
// Add a Window Exit Listener
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// Create and Set up the GUI.
jdpDesktop = new JDesktopPane();
// A specialized layered pane to be used with JInternalFrames
createFrame(); // Create first window
setContentPane(jdpDesktop);
setJMenuBar(createMenuBar());
// Make dragging faster by setting drag mode to Outline
jdpDesktop.putClientProperty("JDesktopPane.dragMode", "outline");
}
protected JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Frame");
menu.setMnemonic(KeyEvent.VK_N);
JMenuItem menuItem = new JMenuItem("New IFrame");
menuItem.setMnemonic(KeyEvent.VK_N);
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
createFrame();
}
});
menu.add(menuItem);
menuBar.add(menu);
return menuBar;
}
protected void createFrame() {
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
// Every JInternalFrame must be added to content pane using JDesktopPane
jdpDesktop.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
}
}
public static void main(String[] args) {
JInternalFrameDemo frame = new JInternalFrameDemo();
frame.setVisible(true);
}
class MyInternalFrame extends JInternalFrame {
static final int xPosition = 30, yPosition = 30;
public MyInternalFrame() {
super("IFrame #" + (++openFrameCount), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setSize(300, 300);
// Set the window's location.
setLocation(xPosition * openFrameCount, yPosition
* openFrameCount);
}
}
}
Código extraido do site: link
Espero ter ajudado
Flwsss
Mas, e se eu tiver uma JanelaPrincipal (JFrame) que abre outra JanelaSecundaria (JFrame), como eu faço para que a JanelaPrincipal obtenha dados vindos da JanelaSecundaria?
Obs.: a JanelaSecundaria é uma instancia criada dentro da JanelaPrincipal.
[quote=EugenioMonteiro]Mas, e se eu tiver uma JanelaPrincipal (JFrame) que abre outra JanelaSecundaria (JFrame), como eu faço para que a JanelaPrincipal obtenha dados vindos da JanelaSecundaria?
Obs.: a JanelaSecundaria é uma instancia criada dentro da JanelaPrincipal.[/quote]
Passo como parametro na hora de instânciar o frame, passa a instancia da classe principal e boa
Algo assim:
e o parametro do construtor é a JanelaPrimaria:
public JanelaSecundaria(JanelaPrimaria janelaAntiga){
// Sei la o que quer fazer agora, passa para um atributo e boa
}
Valeu!