繁体   English   中英

如何在java中将JPanel添加到JFrame

[英]how to add a JPanel to a JFrame in java

在这段代码中,我创建了一个 JFrame 来显示用户单击的位置的 x 和 y 点。 正如您在示例中看到的那样,y 点是一个非常高的数字,因为它考虑了标题栏的高度。 我怎样才能得到它,所以可点击的左上角是 0,0?

现在 (0,0) 遥不可及,我不确定如何合并 JPanel 才能达到这一点。

如果需要,我可以进一步解释我的代码或澄清

例子

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


class Proj07Runner {
    Proj07Runner() { 
        System.out.println(
          "Terminal");
       new GUI();
    }
} 

class MyFrame extends Frame {
  int clickX;
  int clickY;
  public void paint(Graphics g) {
      g.drawString(" " + clickX + ", " + clickY, clickX, clickY);
  } 
} 




class GUI { 
  public GUI(){ // constructor - set up frame
    MyFrame frame = new MyFrame();
    frame.setSize(300,100);
    frame.setTitle("xxx");
    frame.setVisible(true);
    
    // window listent to allow users to close frame 
    frame.addWindowListener(new Close());

    // mouse listener so we can print points for mouse clicks
    frame.addMouseListener(new MouseProc(frame));

    // JPanel
    JPanel panel = new JPanel();
    frame.add(panel);
    } 
} 

// monitors closing window
class Close extends WindowAdapter{
  public void windowClosing(WindowEvent e){
    System.exit(0);
  }
}

// Monitor mouse clicks and gather x and y points
class MouseProc extends MouseAdapter {
    MyFrame reference; 
    MouseProc(MyFrame winIn) { 
      reference = winIn;
    } 
    
    @Override
    public void mousePressed(MouseEvent e) {
      reference.clickX = e.getX();
      reference.clickY = e.getY();
      reference.repaint();
    }
} 

我怎样才能得到它,所以可点击的左上角是 0,0?

将 MouseListener 添加到面板(而不是框架)。 鼠标点与您添加侦听器的组件相关。

然后应通过以下方式完成任何自定义绘画:

  1. 扩展您的 JPanel
  2. 覆盖paintComponent(...)方法,而不是paint(...)。

阅读有关自定义绘画的 Swing 教程以获取更多信息和工作示例,包括使用 MouseListener 的示例。

从本质上讲,jpanel 没有特定的大小,只会在 jframe 中浮动而不做任何特别的事情。 您想要它做的是扩展以占据整个框架。 默认框架使用BorderLayout,所以需要使用border layout center,意思是“尽可能占用空间”

frame.add(panel, BorderLayout.CENTER)

如果您想成为一名优秀的 Swing 程序员,您应该非常熟悉如何使用 BorderLayout。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM