绘制像JComponent绘图板

时间:2013-02-10 14:49:26

标签: java layout paint jcomponent

我有一个扩展JComponent的Pad_Draw类。构造函数是

public Pad_Draw()
{
      this.setDoubleBuffered(true);
      this.setLayout(null);
};

paintComponent方法是:

 public void paintComponent( Graphics g )
 {
      graphics2D = (Graphics2D)g;
      graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      graphics2D.setPaint(Color.white);
      graphics2D.fillRect(0, 0, getSize().width, getSize().height);
 }

JFrame我通过ScrollPane添加此内容:

    JScrollPane Padscroller = new JScrollPane();
    Padscroller.setWheelScrollingEnabled(true);
    Padscroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    Padscroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    Padscroller.setPreferredSize(new Dimension(200, 100));
    Padscroller.setMinimumSize(new Dimension(200, 100));
    Padscroller.setMaximumSize(new Dimension(200, 100));
    Padscroller.setViewportView(drawPad);
    content.add(Padscroller, BorderLayout.CENTER);

但是只要我在Frame中添加内容并设置框架的大小。绘图板根据需要采用整个尺寸。

我想要维护我指定的大小(200,100),我实际上想要像Windows Paint应用程序那样。我应该能够通过扩大角落来增加尺寸。一旦我伸出角落,滚动条就会被激活。任何人都可以告诉我如何实现它吗?

1 个答案:

答案 0 :(得分:2)

JFrame的默认布局管理器,BorderLayout不尊重其组件的首选大小。

你可以做一个布局管理器,例如BoxLayout,并覆盖Padscroller组件中的getPreferredSize:

JScrollPane padScroller = new JScrollPane() {
   @Override
   public Dimension getPreferredSize() {
      return new Dimension(200, 100);
   } 
};

关于增加尺寸,请查看使用MouseAdapter并在mouseDragged方法中更新此属性。