我尝试在Java中绘制一个矩形。我设置了帧大小(800,400)和可调整大小(假)矩形的x = 50,y = 50宽度= 700高度= 300。为什么它不在中间?谢谢。我该如何设置在中间?
1
A
回答
7
没有任何证据,否则,我会猜测你重写的像一个JFrame
的paint
方法和直接画到它。
问题是,帧具有装饰(边框和例如标题栏),这会占用内部框架空间...
技术上讲,这是正确的。该矩形画在框架的中心,但由于框架的装饰,它看起来像它稍高......
相反,你应该画在框架的内容区域。
这里矩形现在看起来正确居中。在我的测试中,我将第一帧(坏)设置为800x400,我将第二帧的内容窗格的首选大小设置为800x400,这使得帧的大小实际上为816x438,因为画面的装饰现在是外部的。
public class CenterOfFrame {
public static void main(String[] args) {
new CenterOfFrame();
}
public CenterOfFrame() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
new BadFrame().setVisible(true);
JFrame goodFrame = new JFrame();
goodFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
goodFrame.setContentPane(new PaintablePane());
goodFrame.pack();
goodFrame.setLocationRelativeTo(null);
goodFrame.setVisible(true);
}
});
}
public class BadFrame extends JFrame {
public BadFrame() {
setSize(800, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void paint(Graphics g) {
super.paint(g);
paintTest(g, getWidth() - 1, getHeight() - 1);
}
}
public void paintTest(Graphics g, int width, int height) {
g.setColor(Color.RED);
g.drawLine(0, 0, width, height);
g.drawLine(width, 0, 0, height);
g.drawRect(50, 50, width - 100, height - 100);
}
public class PaintablePane extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
paintTest(g, getWidth() - 1, getHeight() - 1);
}
}
}
这一点,原因很多,为什么你不应该覆盖顶层容器的paint
方法之一;)
0
Rectangle rect = new Rectangle(50,50,700,300);
这应该可以正常工作,你是否在访问成员变量之前创建一个Rectangle的新实例?
也是800乘400它是一种奇怪的分辨率,800乘600是更标准。
相关问题
- 1. 我该如何设置mod_rewrite?
- 2. 我如何在php中设置时间?
- 3. 我该如何设置pegman的位置?
- 4. 我该如何设置我的gcc
- 5. 我应该如何设置我的DATABASE_URL?
- 6. 我应该如何在starling中设置我的触摸控件?
- 7. 我应该如何在django中设置我的主页?
- 8. 我该如何设置Knockoutjs for Glimpse?
- 9. 我该如何设置标题编程
- 10. 我的查询应该如何设置?
- 11. 我该如何设置放大弹出
- 12. 我该如何设置Time.zone = GMT + 05:30
- 13. 我应该如何设置spring-config.xml?
- 14. 我应该如何设置HADOOP_PREFIX?
- 15. 我应该如何设置回调URI
- 16. 我该如何设置焦点对象
- 17. 我该如何设置“Dim y As”?
- 18. 我该如何设置db2 CURRENT_TIMEZONE?
- 19. 我应该如何设置CLASSPATH?
- 20. 我该如何设置vimeo api with angular2
- 21. 我应该设置在Xcode中创建
- 22. 我该如何在Viewr页面的PagerTitleStrip中设置标题
- 23. 我应该如何开始在XNA中设置lidgren?
- 24. 我应该如何在nodejs应用程序中设置auth?
- 25. 我该如何在css中设置特定的选择器
- 26. 我该如何在sqlapi ++中设置mysql连接字符?
- 27. 我该如何设置BoneCP以便在Ibatis中使用?
- 28. 在Swift中,我该如何快速设置实例变量?
- 29. 我该如何在Android的AutoCompleteTextView中设置“Powered by Google”标题?
- 30. 我应该如何在pyspark中设置参数“spark.kryoserializer.buffer.mb”
其中它位于在屏幕上? –
我把我的钱放在这个窗口的左边缘和上边缘与你的坐标相混淆。你可以张贴截图吗?编辑:另外,这是摆动?如果是这样,你应该重新为它找到最佳的可发现性 – Jeff
我敢打赌你直接在框架上覆盖'paint',这意味着你没有考虑框架的decortations – MadProgrammer