2015-10-06 1 views
1

J'ai fait une simple carte de visite numérique en Java swing en utilisant Eclipse, je suis tout nouveau à Java et la programmation en général alors s'il vous plaît supporter avec moi. Fondamentalement, ce que je veux faire est d'ajouter un bouton qui dit "Notre travail" ou "Portfolio" par exemple, qui, une fois cliqué ouvrira une nouvelle fenêtre où je peux ensuite ajouter des images ou des liens ou de fausses critiques, etcFaire un deuxième cadre en Java swing

Je sais C'est probablement assez simple, mais j'ai du mal à comprendre beaucoup de tutoriels quand il est basé sur le code d'autres peuples.

package dbuscard; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import java.awt.Color; 
import javax.swing.JLabel; 
import javax.swing.ImageIcon; 
import java.awt.Font; 
import javax.swing.JSeparator; 

public class card { 

    private JFrame frame; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        card window = new card(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public card() { 
     initialize(); 
    } 

    /** 
    * Initialise the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.getContentPane().setBackground(new Color(153, 204, 255)); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     JLabel lblLogo = new JLabel(""); 
     lblLogo.setBounds(127, 11, 219, 104); 
     frame.getContentPane().add(lblLogo); 
     lblLogo.setIcon(new ImageIcon("Images\\zlogoimg.png")); 

     JLabel lblNewLabel = new JLabel("t: 01254 777494"); 
     lblNewLabel.setFont(new Font("Source Code Pro Light", Font.PLAIN, 11)); 
     lblNewLabel.setBounds(20, 187, 126, 14); 
     frame.getContentPane().add(lblNewLabel); 

     JLabel lblEApexuxdesigngmailcom = new JLabel("e: [email protected]"); 
     lblEApexuxdesigngmailcom.setFont(new Font("Source Code Pro Light", Font.PLAIN, 11)); 
     lblEApexuxdesigngmailcom.setBounds(20, 204, 200, 14); 
     frame.getContentPane().add(lblEApexuxdesigngmailcom); 

     JLabel lblVisitWebsite = new JLabel("visit website"); 
     lblVisitWebsite.setFont(new Font("Source Code Pro Light", Font.BOLD, 11)); 
     lblVisitWebsite.setBounds(10, 237, 117, 14); 
     frame.getContentPane().add(lblVisitWebsite); 

     JLabel facebook = new JLabel(""); 
     facebook.setBounds(282, 204, 64, 47); 
     frame.getContentPane().add(facebook); 
     facebook.setIcon(new ImageIcon("Images\\facebook.png")); 

     JLabel twitter = new JLabel(""); 
     twitter.setBounds(320, 204, 72, 47); 
     frame.getContentPane().add(twitter); 
     twitter.setIcon(new ImageIcon("Images\\twitter.png")); 

     JLabel youtube = new JLabel(""); 
     youtube.setBounds(356, 204, 68, 47); 
     frame.getContentPane().add(youtube); 
     youtube.setIcon(new ImageIcon("Images\\youtube.png")); 

     JLabel lblSeanHutchinson = new JLabel("Sean Hutchinson"); 
     lblSeanHutchinson.setFont(new Font("Source Code Pro Light", Font.PLAIN, 11)); 
     lblSeanHutchinson.setBounds(20, 128, 126, 14); 
     frame.getContentPane().add(lblSeanHutchinson); 

     JLabel lblUxDesigner = new JLabel("UX Designer"); 
     lblUxDesigner.setFont(new Font("Source Code Pro Light", Font.PLAIN, 11)); 
     lblUxDesigner.setBounds(20, 145, 107, 14); 
     frame.getContentPane().add(lblUxDesigner); 

    JLabel lblNewLabel_1 = new JLabel("CEO - Apex UX Design"); 
     lblNewLabel_1.setFont(new Font("Source Code Pro Light", Font.PLAIN, 11)); 
     lblNewLabel_1.setBounds(20, 162, 158, 14); 
     frame.getContentPane().add(lblNewLabel_1); 


    } 
} 
+0

Je n'ai pas essayé de le faire, mais je crois que ce serait aussi simple que d'avoir deux JFrames. 'JFrame mainWindow, portfolioWindow' et initialiser les deux avec des informations. – CoderMusgrove

+2

Jetez un oeil à [L'utilisation de JFrames multiples, bonne/mauvaise pratique?] (Http://stackoverflow.com/q/9554636/418556) pour des raisons pour lesquelles c'est une mauvaise idée et [Comment faire Dialogues] (http : //docs.oracle.com/javase/tutorial/uiswing/components/dialog.html) pour une solution plus raisonnable – MadProgrammer

+1

En fait, c'est à peu près Swing 101, voir [Création d'une interface graphique avec JFC/Swing] (http: //docs.oracle.com/javase/tutorial/uiswing/) pour plus de détails. Évitez d'utiliser des mises en page 'null', les mises en page pixel parfaites sont une illusion dans la conception moderne de l'interface utilisateur. Il y a trop de facteurs qui affectent la taille individuelle des composants, dont vous ne pouvez contrôler aucun. Swing a été conçu pour fonctionner avec les gestionnaires de mise en page, en éliminant ceux-ci conduira à aucune fin des problèmes et des problèmes que vous passerez de plus en plus de temps à rectifier – MadProgrammer

Répondre

1

Simple. Ajoutez un écouteur d'action qui utilise la méthode setVisible(true); sur un JFrame distinct. Exemple de code:

package com.nonsense; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class del { 

private JFrame frame, frame2; 


/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    del window = new del(); 
    window.frame.setVisible(true); 
} 

/** 
* Create the application. 
*/ 
public del() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    frame2 = new JFrame(); 
    frame2.setBounds(100, 100, 450, 300); 
    frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    frame2.getContentPane().setLayout(null); 

    JButton btnOpenWindow = new JButton("Open Window"); 
    btnOpenWindow.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      frame2.setVisible(true); 
     } 
    }); 
    btnOpenWindow.setBounds(167, 118, 120, 23); 
    frame.getContentPane().add(btnOpenWindow); 

} 
} 

J'utilise « DISPOSE_ON_CLOSE » de sorte que la deuxième fenêtre ne se termine pas le programme lorsque le bouton X est pressé.

+0

'package com.nonsense;' ... hmm, ironiquement approprié. 1) Voir [L'utilisation de plusieurs JFrames, bonne/mauvaise pratique?] (Http://stackoverflow.com/q/9554636/418556) 2) Les interfaces graphiques Java doivent fonctionner sur différents systèmes d'exploitation, taille d'écran, résolution d'écran, etc. en utilisant différents PLAFs dans différentes locales. En tant que tels, ils ne sont pas propices à la mise en page pixel parfait. Utilisez plutôt des gestionnaires de disposition, ou [des combinaisons de ceux-ci] (http://stackoverflow.com/a/5630271/418556) avec un remplissage de mise en page et des bordures pour [espace blanc] (http://stackoverflow.com/a/17874718/ 418556). 3) Swing/AWT GUI devrait être démarré sur l'EDT .. –

+0

@Andrew Thompson Beaucoup de bons points. Cependant, je ne peux pas tester sur différents systèmes d'exploitation. Celui-ci fonctionne sur Win8, pour tous ceux qui veulent savoir. – RubyJunk

+0

* "Je ne peux pas tester sur des systèmes d'exploitation différents." * Je ne peux pas non plus. C'est une des raisons pour lesquelles il est logique de laisser les mises en page! –