gpt4 book ai didi

java - 在 JFrame 内的 JPanel 内设置 JLabel 位置

转载 作者:行者123 更新时间:2023-11-30 08:02:01 26 4
gpt4 key购买 nike

我有一个 JFrame,里面充满了 JPanel(代码如下)。
我正在使用 JPanel 在其中绘制内容,例如,我可以在任何我喜欢的地方绘制线条,但是当向其中添加 JLabel 时,我无法将其移动到卡在顶部中心的任何位置,例如 this线程。
但问题是他们建议的解决方案对我不起作用。
我尝试添加:

 getContentPane().setLayout(null);

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

这是我的代码:
WaveDrawer主类

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();
}
}

最佳答案

but when adding JLabel to it i can't move it anywhere

JPanel 的默认布局管理器是 FlowLayout。当您将组件添加到面板时,它们将根据布局管理器的规则进行定位。

getContentPane().setLayout(null);

您不想将内容 Pane 布局设置为 null,而是希望将 Surface 面板布局设置为 null。

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

关于java - 在 JFrame 内的 JPanel 内设置 JLabel 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760329/

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