当前位置: 首页 > 知识库问答 >
问题:

在分层窗格上绘制到JPanel

胡劲
2023-03-14
JFrame frame = new JFrame();
frame.add(new CustomPaintComponent());
pane.add(new CustomPaintComponent(),JLayeredPane.POPUP_LAYER);
package example;

import javax.swing.*;

public class Example {

    public static void main(String[] args) {
        
        JLayeredPane forLayers = new JLayeredPane();
        forLayers.setSize(300, 300);
        
        JFrame showsDrawnImage = new JFrame ("JFrame");
        showsDrawnImage.setSize(300, 300);
        
        JPanel panelDrawnOn = new DrawImage();
        
        //CODE BELOW WORKS - and returns string line in output//
        
        showsDrawnImage.add(panelDrawnOn); //blank these out to show the layeredpane example
        showsDrawnImage.setVisible(true); //blank these out to show the layeredpane example
        
        //CODE BELOW DOESN'T WORK - only shows the JFrame and DOES NOT return string line in output//

        forLayers.add(panelDrawnOn, JLayeredPane.PALETTE_LAYER);
        showsDrawnImage.add(forLayers);
        forLayers.setVisible(true);
        showsDrawnImage.setVisible(true);

    }
    
}

DrawImage类进行实际绘制

package example;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;

public class DrawImage extends JPanel{
    
    public void paintComponent( Graphics g ) {
        
                    System.out.println("This is what I try to access/draw");
                    
                    super.paintComponent(g);
                    Graphics2D g2 = (Graphics2D)g;

                    Line2D line = new Line2D.Double(10, 10, 40, 40);
                    g2.setColor(Color.blue);
                    g2.setStroke(new BasicStroke(10));
                    g2.draw(line);
 
                 }
    
}

共有1个答案

咸星波
2023-03-14

我想主要问题是您的自定义组件没有“大小”,所以没有什么可绘制的。

当您将组件添加到JFrame时,布局管理器会给组件一个大小。JLayeredPane不使用布局管理器,因此现在您有责任给组件指定大小和位置。

阅读Swing教程中关于如何为一个工作示例使用分层窗格的部分。

 类似资料:
  • 所以我试图用Java显示一个棋盘。到目前为止,我可以正确地绘制和着色一组矩形,并正确地调整窗口和矩形的大小。然而,现在我想在这些矩形上添加一个棋子的图像,我不知道如何继续。 我为棋子创建了png的图像视图,但是当我尝试像使用矩形一样将其添加到网格窗格中时,它会给我一个重复的子错误。 以下是目前为止有效的代码 创建象棋棋子的图像视图并将其绘制在矩形之上的最佳方法是什么,就像棋子在棋盘上的样子一样?我

  • 我是JavaFx的新手,我想知道如何绘制网格,我想在网格角上绘制点。我应该使用网格窗格作为基础还是线条图?使用网格并在其上绘制的最佳类是什么?

  • 问题内容: 我正在做一项家庭作业,我应该制作一个程序,使您可以绘制自定义形状和线条,并在屏幕上移动它们。 最初,我使用公共空隙进行绘画,但是当我调用重绘时,形状会闪烁。 因此,我切换到。但是,当我尝试绘制形状时,没有任何显示。我相信这是因为它不在顶部绘画。 框架在3行中有3个面板。 我想绘制的面板自然是Draw Box面板。 这是我目前拥有的代码: 问题答案: 您的Main类扩展了JPanel,具

  • 在片段中绘制该图像的最佳方式是什么(所有矩形都应该使用屏幕的整个宽度,高度应该以特定的dp度量)?显然需要画矩形,但我不知道如何在下面的灰色大矩形上画白色和黄色的矩形。同样,使用相同的片段java类,而不是创建一个新的,可以实现这一点吗?

  • 设计定制JTable我已经知道DefaultCellEditor在其构造函数中允许使用JComboBox。单击此JComboBox以显示列表项时,它显示在JTable的其他单元格上方。问题是,我需要一个更复杂的行为,就像JComboBox提供的那样,这样我就用一个JList和一个JButton实现了一个JTextField,当点击JButton(或者用户在JTextField中输入文本)时,JLi

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我想用Java绘制图形(节点和边)。但是,由于我不知道该怎么做,因此在开始之前我想寻求一些建议。 我应该怎么做? 使用Graphics2D包,对吗? 节点的标签怎么样?我应该使用诸如drawString之类的东西并手动处理所有“