【问题标题】:JPanel getpreferredsize() returns 10 instead of size of JFrame minus bordersJPanel getpreferredsize() 返回 10 而不是 JFrame 的大小减去边框
【发布时间】:2021-02-18 09:32:47
【问题描述】:

我正在尝试获取 JPanel 的大小,以便随后计算我计划添加的图形的正确尺寸。由于我已将 JFrame 的大小设置为 (300, 200),因此我期望 getpreferredsize() 函数返回略小于 (300, 200) 的值(即减去边框)。但是,该函数仅返回 10 的高度和宽度。请帮忙。

import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.io.*;
import java.awt.Dimension;

class Main {
  public static void main(String[] args) {
    Frame f = new Frame();
  }
}

class Frame extends JFrame {
  
  public Frame() {
    setSize(300, 200);
    setLocationRelativeTo(null);
    setTitle("Test Panel Size");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    setVisible(true);  

    setLayout(new BorderLayout());
    add(drawPanel, BorderLayout.CENTER);
    pack();
    drawPanel.printPanelSize();
  }

  private Panel drawPanel = new Panel();
}

class Panel extends JPanel {

  public void printPanelSize() {
    Dimension size = getPreferredSize();
    int w = size.width;
    int h = size.height;
    System.out.println("h = " + h + " w = " + w);
  }

} 

【问题讨论】:

  • 以便我随后可以计算我计划添加的图形的正确尺寸 您可能应该学习 Swing,而不是 AWT。阅读 Custom Painting 上的 Swing 教程部分。它将向您展示如何覆盖 getPreferredSize() 方法,以便您的面板具有可由应用程序的布局管理器使用的默认大小。
  • 成功了!谢谢。

标签: java swing jframe jpanel size


【解决方案1】:

替换

setSize(300, 200);

setPreferredSize(new Dimension(300, 200));

替换

 Dimension size = getPreferredSize();

Dimension size = getSize();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多