我想全屏显示并按顺序保存所有内容。
我应该如何将JFrame全屏显示 和 重新调整内部的所有内容:图片,生成的图纸等(比如放大它以使内容适合屏幕) )。
问题是我正在制作全屏应用,但我不知道它将在什么屏幕上显示。
这会将帧置于全屏,但内容不会重新调整
frame.dispose();
frame.setUndecorated(true);
frame.setLocation(0, 0);
frame.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
frame.setVisible(true);
frame.repaint();
答案 0 :(得分:5)
取决于您想要扩展的内容。
如果您使用Java2D绘制图形,只需计算出需要扩展的内容,并使用Graphics2D.scale()来适当地缩放gfx。
如果它具有Swing布局,请使用布局管理器进行自适应布局。
如果是其他内容,请详细说明您的问题
答案 1 :(得分:2)
如果这真的是你想要做的(参见其他答案的警告),那么做起来并不难(但需要花一点时间才能搞清楚)。基本上,它涉及扩展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();
}});
}
}
答案 2 :(得分:1)
https://docs.google.com/open?id=0B9U-BwYu62ZaeDM3SWZhaTdSYzQ