java - 调用 pack() 后如何在面板上画一条线?

标签 java swing user-interface awt

我正在使用 Swing 组件用 Java 编写一个小型 GUI。我的程序使用几个重叠的面板,其大小在调用“pack()”时决定。

我的问题是这样的。我需要在 pack() 之前知道特定 JPanel 的尺寸,因为我需要垂直向下画一条线。然而,在调用 pack 之前我无法获得这个高度尺寸。

我在 pack 命令之前放入了 System.out.println(myPanel.getSize()) 调用,它返回 (0, 0)。当放入之后,它会返回面板的实际尺寸......正如您所期望的那样。

那么,如何在面板的整个长度上画一条线,要么一开始不知道其长度,要么在调用 pack 后以某种方式这样做?

最佳答案

您可以通过向面板添加 ComponentListener 来实现此目的。每当调整面板大小时,都会触发其 componentResized() 事件。在 componentResized() 方法中,您将始终获得面板的实际大小。尝试下面的示例并亲自查看。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

public class PanelResize
{
  public static void main(String[] args)
  {
    CustomPanel panel = new CustomPanel();
    panel.addComponentListener(new ComponentAdapter()
    {
      @Override
      public void componentResized(ComponentEvent e)
      {
        System.out.println(panel.getSize());
        panel.repaint();
      }
    });

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(panel);
    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }
}

class CustomPanel extends JPanel
{
  @Override
  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g.setColor(Color.blue);
    g.drawLine(getWidth()/2, 0, getWidth()/2, getHeight());
  }
}

关于java - 调用 pack() 后如何在面板上画一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399501/

相关文章:

c++ - 有没有办法在没有事件循环的情况下编写 GUI?

java - 如何检查列表中是否存在包含部分字符的元素

java - IBatis + Java : Retrieving HashMap

java - 在 Swing Java 中向 JList 添加元素

java - JTextArea 更新为 DocumentListener

Java从文本文件中读取

java - Android:当我为 ListView 设置 OnClickListener 时

java - Shell 文件在手动运行时有效,但在 CRON 中运行时失败

java - 为什么赋值表达式 [String x = (x = y)] 的变量初始化会编译?

java - 选择值时无法更新 JTable 中的 JComboBox