有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java如何在面板上添加组件?

我正在学习java,我从头开始:)

我想在面板上画线,但我做不到

这是我的密码:

public class Window extends JFrame{

    public Window(){    
        setSize(600,600); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    Container pow = getContentPane(); 
    Component k = new Test();           
    pow.add(k); 

    Panel p1 = new Panel();
    p1.setBounds(40, 40, 520, 520);
    p1.setBackground(Color.white);
    pow.add(p1);    
}
}

和面板类

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

public class Test extends JPanel{

public void paintComponent(Graphics g){
    g.drawLine(30, 50, 30, 550);
    g.drawLine(30, 550, 550, 550);

    g.drawLine(30, 50, 20, 60);
    g.drawLine(30, 50, 40, 60);

    g.drawLine(550, 550, 540, 540);
    g.drawLine(550, 550, 540, 560);
}

}

和主要

    public static void main(String[] args){
    Window mo = new Window();
    mo.setVisible(true);
}

为什么我的组件在面板下? 对不起,这是我的密码


共 (2) 个答案

  1. # 1 楼答案

    PanelComponent是AWT,JPanelJComponent是Swing。AWT不使用paintComponent,而是使用paint。将AWT类切换到Swing类,或者将paintComponent切换到paint这样可能会起作用

    这就是为什么向重写方法中添加@Override是个好主意,因为它告诉您paintComponent不是Component的方法

    此外,还将零部件和面板添加到同一容器中。将组件放入面板中

    p1.add(k); // yes (add this to your code)
    pow.add(k); // no (remove this from your code)
    pow.add(p1); // previous would get covered
    
  2. # 2 楼答案

    • contentPane使用BorderLayout作为其默认布局
    • 将组件添加到BorderLayout容器而不指定位置时,会添加BorderLayout。中锋
    • 这将覆盖之前添加到同一位置的任何其他组件

    解决方案:

    • 阅读并尝试使用其他布局管理器。勾选this tutorial
    • 不要设置边界或使用空布局