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

在JFrame内的JPanel内设置JLabel位置

郑西岭
2023-03-14

我有一个JFrame,里面装满了JPanel(下面的代码)。
我正在使用JPanel在里面画东西,例如,我可以在任何我喜欢的地方画线,但是当添加JLabel到它的时候,我不能把它移动到它卡住的任何地方
但问题是他们建议的解决方案对我不起作用。

 getContentPane().setLayout(null);

很抱歉,如果我不清楚,我试图在创建Surface之前和之后在函数initUI()中添加上面的内容。
但是在那之后,框架显示几乎(1,1)大小和它的空(如果我使用鼠标拖动手动调整它的大小)。

这是我的代码:
在课堂上

public class WaveDrawerMain extends JFrame {

private static WaveDrawerMain wd;
private Surface s;
public WaveDrawerMain() {
    initUI();
    s.drawLinexxx();
}
private void initUI() {

    setupMenu();
    s = new Surface(1200, 300); 
    add(s);
    setTitle("Waves");
    setSize(1200, 300);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
}
private static void constructDrawer() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            wd = new WaveDrawerMain();
            wd.setVisible(true);
        }
    });
}
public static WaveDrawerMain createDrawer(){
    constructDrawer();
    idPool = new IntPool(100);
    lines = new LinesManager();
    return wd;
}
}

表面类:

class Surface extends JPanel {

private ArrayList<Integer> points = new ArrayList<Integer>();
private int pWidth, pHeight;
@Override
public void paintComponent(Graphics g) {

    super.paintComponent(g);
    doDrawing(g);

}
@Override
public Dimension getPreferredSize() {
    return new Dimension(pWidth, pHeight);
}

public Surface(int width, int height) {
    pWidth = width;
    pHeight = height;


}

private void doDrawing(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;

    g2d.drawLine(30, 30, 200, 30);
    for(int i = 0;i<points.size();i++){
        g2d.drawLine(points.get(i), 100, points.get(i)+50, 100+50);
    }
}

public void drawLinexxx(){
    points.add(600);
    JLabel lab1 = new JLabel("Test x "+Float.toString(getSize().width/3)+" y "+Float.toString(getSize().height/3));
    lab1.setLocation(getSize().width/3, getSize().height/3);

    add(lab1);
    repaint();
}
}

共有1个答案

靳越
2023-03-14

但是当添加JLabel时,我不能移动它

JPanel的默认布局管理器是FlowLayout。将构件添加到配电盘时,它们将根据布局管理器的规则进行定位。

getContentPane().setLayout(null);

您不希望将内容窗格布局设置为null,而是希望将曲面面板布局设置为null。

但是,当您这样做时,您现在负责管理布局管理器的功能,这意味着一旦您将标签添加到Surface面板,您就负责设置标签的大小和位置。位置和大小都默认为(0,0)。

 类似资料:
  • 问题内容: 我当前的问题是我有一个带有2x2 GridLayout的JFrame。在其中一个正方形内,我有一个JPanel,用于显示网格。我正在使用Java swing库进行实地调查… 图片 Java将自动扩展每个JLabel以适合屏幕。我希望它只是那些蓝色正方形(水)和黑色边框,而不是那个灰色空间。有没有一种方法可以永久设置JPanel的大小,这样我就不必在获得确切尺寸之前将JFrame的大小更

  • 我需要一个帮助来定位一个JPanel在一个特定的位置到一个Jframe。 我在一个扩展JFrame的类中有一个JPanel,我需要将这个JPanel放在一个特定的x,y位置。 是这样的: 我不需要一个LayoutManager的位置的JPanel,因为我需要把JPanel在一个特定的位置(像150,150的例子)。但是如果我panel.set位置(150,150),就像上面的代码一样,什么都不会发

  • 我有JPanel,它包含: JButton和JLabel,其中设置了图片 我想把按钮放在JLabel顶部的北中心位置。目前它的设置彼此相邻,我不知道如何覆盖JLabel。 我在这里尝试了许多解决方案,但是它似乎并不完全按照我想要的方式工作。谢谢! 更新:按钮放在JLabel的顶部,但不在里面。

  • 我有一个JFrame,它被设置为大小为NxN的GridLayout。N由用户在程序开始时作为命令行给出。NxN模式中的JButton被添加到JPanels中的窗口中,由GridLayout(我认为)在位置中设置。 每个JButton是否需要自己的JPanel来使用GridLayout?我的印象是,您可以为所有按钮设置一个JPanel,并将JPanel设置为JButtons的GridLayout。我

  • 我试图添加一个imagepanel,将JPanel扩展到另一个JPanel。这对我来说不太好。图像面板的绘制功能在Jpanel中不会被调用,但在JFrame中可以正常工作。任何想法或帮助都将不胜感激。

  • 嗨,我正在编写一个简单的物理引擎,以便更好地理解对象碰撞和Java图形,到目前为止,我已经成功地编写了代码,将JPanel添加到JFrame中,并允许它们显示一些正确的大小,但当我查看实际程序时,JPanel似乎是正确的大小,但它不是从窗口的上角开始的,而是从框架的左上角开始的。我似乎有这个问题很多,我想要的东西在(0,0)和开始在框架的上角,而不是面板。下面是我的代码: 我有一个引擎类,它扩展了