Java 在JFrame内的JPanel内设置JLabel位置
我有一个JFrame,里面填充了is JPanel(代码如下)。Java 在JFrame内的JPanel内设置JLabel位置,java,swing,jframe,jpanel,jlabel,Java,Swing,Jframe,Jpanel,Jlabel,我有一个JFrame,里面填充了is JPanel(代码如下)。 我正在使用JPanel在其中绘制东西,例如,我可以在任何我喜欢的地方绘制线,但在向其中添加JLabel时,我不能将其移动到任何它卡在上止点的地方,就像线一样。 但问题是他们提出的解决方案对我不起作用。 我试着加上: getContentPane().setLayout(null); 如果我不清楚,很抱歉,我尝试在创建曲面之前和之后在函数initUI()中添加上述内容。 但在此之后,框架显示为几乎(1,1)大小,并且为空(如果我
我正在使用JPanel在其中绘制东西,例如,我可以在任何我喜欢的地方绘制线,但在向其中添加JLabel时,我不能将其移动到任何它卡在上止点的地方,就像线一样。
但问题是他们提出的解决方案对我不起作用。
我试着加上:
getContentPane().setLayout(null);
如果我不清楚,很抱歉,我尝试在创建曲面之前和之后在函数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();
}
}
类表面扩展了JPanel{
private ArrayList points=new ArrayList();
普威特私人酒店;
@凌驾
公共组件(图形g){
超级组件(g);
doDrawing(g);
}
@凌驾
公共维度getPreferredSize(){
返回新尺寸(pWidth,pHeight);
}
公共曲面(整型宽度、整型高度){
pWidth=宽度;
pHeight=高度;
}
私人空间绘制(图g){
Graphics2D g2d=(Graphics2D)g;
g2d.抽绳(30,30,200,30);
对于(int i=0;i
但在添加JLabel时,我无法将其移动到任何地方
JPanel
的默认布局管理器是FlowLayout
。将组件添加到面板时,它们将根据布局管理器的规则进行定位
getContentPane().setLayout(null);
您不希望将内容窗格布局设置为null,而是希望将曲面
面板布局设置为null
但是,执行此操作时,您现在负责管理布局管理器的功能,这意味着您将标签添加到曲面面板后,您将负责设置标签的大小和位置。位置和大小都将默认为(0,0)