java - 面板的坐标规范
问题描述
如何指定以下面板的坐标,而不是使其与中心对齐。
我已经尝试了很多并使用了不同的布局,但仍然无法让它工作。请帮我解决这个问题。谢谢!
这是我的代码..
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Lesson2 extends JFrame {
private static final long serialVersionUID = -198253288329146091L;
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Lesson2 frame = new Lesson2();
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Lesson2() {
contentPane = new JPanel();
setContentPane(contentPane);
JPanel panel = new JPanel() {
private static final long serialVersionUID = -5974584127539186578L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillRect(0, 0, 500, 500);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
};
contentPane.add(panel);
}
}
这是它现在的外观示例 https://prnt.sc/moe3al
这是使用设置大小的空布局编辑的最终代码
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Lesson1 extends JFrame {
private static final long serialVersionUID = -198253288329146091L;
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Lesson1 frame = new Lesson1();
frame.setSize(1000, 1000);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Lesson1() {
contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel() {
private static final long serialVersionUID = -5974584127539186578L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillRect(0, 0, 500, 500);
}
};
panel.setLayout(null);
panel.setSize(500, 500);
contentPane.add(panel);
}
}
解决方案
所有 Swing/AWT 容器都使用 FlowLayout 作为默认布局管理器,这导致组件居中。如果您想要更多控制,可以通过调用 contentPane.setLayout(null) 并通过 panel.setBounds() 设置组件的坐标来使用绝对定位,但请注意它可能无法优雅地处理窗口调整大小。
推荐阅读
- c# - 如何导航到 UWP 中图形捕获选择器选择的屏幕
- visual-studio-code - Visual Studio Code - 将用户代码段放在 Emmet 代码段之上?
- c++ - 解决方案中的值 x 表示什么?
- linux - 如何像windows一样在linux中的文件中添加隐藏属性?
- python-3.x - 如何下载存储在 django 文件夹中的文件
- python - 如何从基于类的视图中将模型类属性作为上下文传递
- oracle - 用于插入/更新列的触发器在 Oracle 中不起作用
- css - 在 flexbox 布局中,`order` 属性会改变项目的绘制顺序吗?
- python-3.x - 在某些操作之前或之后将变量声明为实例变量
- javascript - 带有 for 循环的 JavaScript Promise