gpt4 book ai didi

java - 当我向框架添加 JPanel 时,图形被遮挡(java)

转载 作者:行者123 更新时间:2023-12-01 07:07:23 29 4
gpt4 key购买 nike

我的框架中显示了一些 Graphics2D 图形,然后我向整个框架添加了一个 JPanel,以便我可以添加一个鼠标监听器来单击面板中的任何位置。然而,图形消失了,我假设被框架挡住了。我尝试将面板设置为可见错误,但这没有任何作用。如何让我的鼠标监听器监听整个窗口,同时仍然显示我的图形?

编辑:这是一些代码:编辑:(还有更多)

//adding the panel and mouselistener
JPanel allPanel = new JPanel();
allPanel.addMouseListener(this);
frame.add(allPanel);


//...
//drawing some of the graphics
public void draw() {



frame.add(new CustomPaintComponent());
// Display the frame

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
JPanel allPanel = new JPanel();
allPanel.addMouseListener(this);
frame.add(allPanel);
}


static class CustomPaintComponent extends Component {

private static final long serialVersionUID = 1L;

public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D)g;
g2d.fillRoundRect(10, 10, 50, 50, 10,10);

//...

最佳答案

三个问题跳出来......

首先,JFrame 使用 BorderLayout 作为其默认布局管理器,这意味着只有一个组件可以占据其可用的五个位置中的任何一个。通过使用 add(Component),您可以将每个组件添加到 CENTRE 位置,覆盖您添加到其中的第一个组件...

其次,JPanel 默认情况下是不透明的,这意味着,即使您确实让两个组件占据相同的空间,顶部组件也会挡住下面的组件

第三,您应该使用 paintComponent 而不是 paint

看看Performing Custom Painting了解更多详情

解决方案可能是将 MouseListener 直接添加到自定义组件

另一种选择是在下部组件上使用 BorderLayout,使顶部组件透明(使用 setOpaque(false))并将其直接添加到下部组件...

关于java - 当我向框架添加 JPanel 时,图形被遮挡(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082817/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com