Java 如何将JFrame放入全屏并自动重新缩放内容
我想全屏播放,让里面的一切井然有序 我应该如何将JFrame放在全屏和重新缩放里面的所有内容:图像、生成的图形等(比如放大它以便内容适合屏幕) 问题是我正在制作全屏应用程序,但我不知道它会显示在什么屏幕上 这将使帧进入全屏,但内容不会被重新缩放Java 如何将JFrame放入全屏并自动重新缩放内容,java,swing,awt,fullscreen,Java,Swing,Awt,Fullscreen,我想全屏播放,让里面的一切井然有序 我应该如何将JFrame放在全屏和重新缩放里面的所有内容:图像、生成的图形等(比如放大它以便内容适合屏幕) 问题是我正在制作全屏应用程序,但我不知道它会显示在什么屏幕上 这将使帧进入全屏,但内容不会被重新缩放 frame.dispose(); frame.setUndecorated(true); frame.setLocation(0, 0); frame.setSize(java.awt.Toolkit.getDefaultTool
frame.dispose();
frame.setUndecorated(true);
frame.setLocation(0, 0);
frame.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
frame.setVisible(true);
frame.repaint();
这取决于您要缩放的对象
- 如果使用Java2D绘制图形,只需计算出需要放大多少,然后使用Graphics2D.scale()适当地缩放gfx
- 如果是Swing布局,请使用布局管理器生成自适应布局
- 如果是其他问题,请详细说明您的问题
如果这确实是您想要做的事情(请参阅其他答案中的警告),那么这并不难做到(但需要一点时间才能弄清楚)。基本上,它包括扩展
JPanel
,然后覆盖paint
方法
以下是我提出的一个示例:
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();
}});
}
}
是否有任何选项可以只缩放内容(无论它是什么),从而填充更大/更小的区域?你缩放图片、壁纸等的方式?这就是图形的2D比例does@RobertKilar:根据您的需要使用适当的,而不是