2012-08-09 4 views
4

Je veux aller en plein écran et garder tout à l'intérieur dans l'ordre.Comment mettre JFrame en FullScreen et redimensionner automatiquement le contenu

Comment dois-je mettre le JFrame en mode plein écran ET redimensionnez-tout à l'intérieur: les images, les dessins générés etc. (STH comme le zoom vers le haut de sorte que le contenu sera adapté à l'écran).

Le problème est que je fais une application en plein écran, mais je ne sais pas sur quel écran il sera affiché.

Cela mettra le cadre en plein écran, mais le contenu ne sera pas redimensionnée

frame.dispose(); 
    frame.setUndecorated(true); 
    frame.setLocation(0, 0); 
    frame.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize()); 
    frame.setVisible(true); 
    frame.repaint(); 

Répondre

2

Si cela est vraiment ce que vous voulez faire (voir mises en garde d'autres réponses), il est pas trop difficile à faire (mais prend un peu de temps pour comprendre). Fondamentalement, il implique l'extension JPanel, puis l'écrasement de la méthode paint.

Voici un échantillon que je suis venu avec:

import java.awt.*; 
import java.awt.image.BufferedImage;  
import javax.swing.*; 


public class CustomPanel extends JPanel{ 

    Component myComponent; 

    public CustomPanel(){ 
     super(); 
     setLayout(null); 
    } 

    /** 
    * Only allows one component to be added 
    */ 
    @Override 
    public Component add(Component c){ 
     super.add(c); 
     c.setLocation(0, 0); 
     c.setSize(c.getPreferredSize()); 
     myComponent = c; 
     return c; 
    } 

    @Override 
    public void paint(final Graphics g){ 

     Dimension d = this.getSize();    
     Dimension p = myComponent.getPreferredSize(); 

     // Paints the child component to a image 
     BufferedImage newImg = new BufferedImage(p.width, p.height, BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g2d = newImg.createGraphics(); 
     super.paint(g2d); 

     // Resizes the image if necessary 
     Image img; 
     if(d.height > p.height && d.width > p.width){ 
      System.out.println("Scaled"); 

      float changePercentage = 0; 
      if(d.height/p.height > d.width/p.width){ 
       changePercentage = (float)d.width/(float)p.width; 
      } else{ 
       changePercentage = (float)d.height/(float)p.height; 
      } 
      System.out.println(changePercentage); 

      int newHeight = ((Float)(p.height * changePercentage)).intValue(); 
      int newWidth = ((Float)(p.width * changePercentage)).intValue(); 

      img = newImg.getScaledInstance(newWidth, newHeight, 0);    
     } else{ 
      System.out.println("Not Scaled"); 
      img = newImg; 
     } 

     // Paints the image of the child component to the screen. 
     g.drawImage(img, 0, 0, null); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     SwingUtilities.invokeLater(new Runnable(){public void run(){ 

      JFrame frame = new JFrame("Zoom Panel"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setSize(300, 200); 

      CustomPanel buffer = new CustomPanel(); 
      JPanel content = new JPanel(); 
      content.add(new JLabel("Bogus")); 
      content.setBackground(Color.red); 
      buffer.add(content); 
      frame.setContentPane(buffer); 

      frame.setVisible(true); 
      new CustomPanel(); 

     }}); 
    } 

} 
5

dépend de ce qu'il est que vous voulez à l'échelle.

  • Si ses graphismes vous dessiner à l'aide Java2D, juste comprendre combien les choses doit être mis à l'échelle et utiliser Graphics2D.scale() à l'échelle du GFX appropiately.

  • Si c'est quelque chose avec une mise en page Swing, utilisez un gestionnaire de mise en page pour faire une mise en page adaptative.

  • Si son autre chose, élaborée sur votre problème

+0

est-il une option pour zoomer tout contenu (quoi que ce soit) il remplit la zone plus grande/plus petite? La façon dont vous zoomez les images, le papier peint, etc.? – Yoda

+0

C'est ce que Graphics2D.scale * fait * – Durandal

+0

Mais si les boutons seront redimensionnés? – Yoda

Questions connexes