【发布时间】:2014-02-17 23:03:28
【问题描述】:
程序根据屏幕分辨率或计算机大小运行其大小。当我在具有特定尺寸显示器的计算机上运行它时,它会相应地改变。我的问题是 JPanel 或框架内的任何对象的定位和大小,以适应屏幕大小的变化。
因此,每当我将我的程序展示在任何尺寸不同的显示器上时,组件仍将按照我最初设计的方式进行组织和放置。但在这里,我使用一个名为 displayMenu 的 JPanel 对其进行测试。它在其中显示一个绿色的面板。
package saves.project;
import com.sun.awt.AWTUtilities;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.BorderFactory;
import javax.imageio.ImageIO;
public class Homepage extends JFrame{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Border grayline = BorderFactory.createLineBorder(Color.GRAY);;
int width = screenSize.width, height = screenSize.height;
public Homepage() throws IOException{
super("Homepage");
displayMenu();
displayBackground();
}
public static BufferedImage resize(BufferedImage image, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(image, 0, 0, width, height, null);
g2d.dispose();
return bi;
}
public void displayBackground() throws IOException{
JPanel pBackground = new JPanel();
pBackground.setSize(screenSize);
pBackground.setLayout(new FlowLayout());
add(pBackground);
BufferedImage header = ImageIO.read(new File("res\\bg.jpg"));
BufferedImage resizedImage = resize(header,width,height);
ImageIcon image = new ImageIcon(resizedImage);
JLabel lblheader = new JLabel(image, JLabel.CENTER);
pBackground.add(lblheader);
}
public void displayMenu() {
JPanel pTitle = new JPanel();
pTitle.setLayout(null);
pTitle.setBounds(width/3, (height/2)+20, width/2, height/2);
pTitle.setBackground(Color.GREEN);
add(pTitle);
}
public void CreateAndShowGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
setVisible(true);
}
}
另外,看起来我的背景并没有完全散布在整个画面中。顶部有一条白线,其余的是背景。我该怎么办?感谢您的帮助!
【问题讨论】:
-
不要使用组件的 setSize 或 setBounds,它们应该留给布局管理器。考虑使用类似 GridBagLayout 的东西,您需要更好地控制布局。你可能还会发现,当 HomePage 是构造函数时,组件的大小是未知的
-
感谢您的回答!你能提供更多细节吗?在此先感谢^^我只是这里的新手:D
标签: java swing layout-manager