O titulo já diz tudo eu preciso abrir um JFrame no monitor auxiliar, e se tiver mais de um ele tem que abrir em todos, menos no principal, onde vai estar rodando a aplicação principal
Procure por “dual head jframe” no Google.
Dica:
http://docs.oracle.com/javase/6/docs/api/java/awt/GraphicsEnvironment.html#getScreenDevices()
http://docs.oracle.com/javase/6/docs/api/java/awt/GraphicsDevice.html
http://docs.oracle.com/javase/6/docs/api/java/awt/GraphicsDevice.html#getDefaultConfiguration()
http://docs.oracle.com/javase/6/docs/api/javax/swing/JFrame.html#JFrame(java.lang.String,%20java.awt.GraphicsConfiguration)
(Basicamente: chame getScreenDevices para obter os GraphicDevices de cada monitor. Então escolha o monitor adequado para abrir seu JFrame, passando o GraphicsConfiguration que foi obtido com o método getDefaultConfiguration(). )
Você não pode abrir o MESMO JFrame em todos os outros monitores - você pode abrir MÚLTIPLAS instâncias desse JFrame, cada um em um monitor.
Eu utilizo o seguinte método,
Acredito que pode te ajudar.
int tela=0;
JFrame jfTelaSec = new JFrame;
private void exibeTelaSec() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = ge.getScreenDevices();
for (int i = 0; i < devices.length && tela < 0; i++) {
if (UTI.confirmar(this, "Exibir interface de usuário na tela " + (i+1) + "?", "CONEM")) {
tela = i;
}
}
if (tela < 0) {
UTI.aviso(this, "Nenhuma tela selecionada, execute o comando novamente", "CONEM");
} else {
devices[tela].setFullScreenWindow(jfTelaSec);
int width = jfTelaSec.getWidth();
int height = jfTelaSec.getHeight();
int xx = (int) jfTelaSec.getLocation().getX();
int yy = (int) jfTelaSec.getLocation().getY();
devices[tela].setFullScreenWindow(null);
jfTelaSec.setSize(width, height);
jfTelaSec.setLocation(xx, yy);
jfTelaSec.setVisible(true);
}
}
Qualquer cosia posta aí.
eu entendi a sua ideia, agora onde que eu coloco esse trecho de codigo, de pois da inicialização dos componentes, eu to utilizando o NetBeans para gerar as tela então eu colocaria nessa parte
public TelaPrincipal() {
initComponents();
setLocationRelativeTo(null);
try{
String strLAF = javax.swing.UIManager.getSystemLookAndFeelClassName();
javax.swing.UIManager.setLookAndFeel(strLAF);
javax.swing.SwingUtilities.updateComponentTreeUI(this);
this.pack();
}catch(Exception e){
System.out.println(e.getMessage());
}
// Eu colocaria o trecho de codigo aqui isso awolf1
}
Seria uma opção…
No software que desenvolvi que utiliza isso, ele trabalha com dois monitores, uma para o operador, e uma para exibir para o cliente informações…
Então quando o operador do sistema inicia alguma janela que contém informações que devem ser exibidas para o usuário eu executo esse método (no action do botão) para abrir a tela…
se no seu caso, a janela ficará sempre aberta no outro monitor pode ser no local onde você comentou mesmo…
ps.: o UTI.configrmar
public static boolean confirmar(Component comp, String aviso, String titulo) {
Object[] options = {"Sim", "Não"};
int i = JOptionPane.showOptionDialog(comp,
aviso, titulo,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[1]);
if (i == JOptionPane.YES_OPTION) {
return true;
}
return false;
}
public static boolean confirmar(Component comp, String aviso) {
return confirmar(comp, aviso, "Confirmar");
}
o que seria essa variavel UTI ???
UTI é uma classe java de utilitários. como por exemplo exibir um JOptionPane que solicita um texto.
Na mensagem anterior postei o código fonte desse método.