java panel 左对齐,将Shape的中心与JPanel的中心对齐 - java
我一直在尝试将java2d形状的中心与JPanel的中心对齐,但没有成功。我能够使用getBounds方法对图像和许多2D形状(如平行四边形)执行此操作,但对于菱形却无法做到,尽管它们都遵循相同的模式。彻底地,当我从实际项目中准备SSCCE时,我无法正确对齐它们。
我已经编写了一个drawShape方法来在中心上绘制形状。我不明白我要去哪里错了。
这是SSCCE:
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class TestPanel extends JPanel{
Point a,b,c,d;
Shape trapezium,parallelogram;
Random random=new Random();
public TestPanel(){
a=new Point();
b=new Point();
c=new Point();
d=new Point();
rhombusFactory(a,b,c,d);
trapezium=getQuadrilateral(a,b,c,d);
}
private void rhombusFactory(Point a,Point b,Point c,Point d)
{ int width=random.nextInt(200-100)+100;
int height=random.nextInt(150-50)+50;
a.x=0;
a.y=0;
b.x=a.x+width/2;
b.y=a.y+height/2;
c.x=a.x+width;
c.y=a.y;
d.x=a.x+width/2;
d.y=a.y-height/2;
}
private void parallelogramFactory(Point a,Point b,Point c,Point d){
int l1=random.nextInt(200-100)+100;
int l2=random.nextInt(150-70)+70;
int offset=(random.nextInt(2)==0?-1:1)*(random.nextInt(50-20)+20);
a.x=0;
a.y=0;
b.x=a.x+l1;
b.y=a.y;
d.x=a.x+offset;
d.y=a.y+l2;
c.x=d.x+l1;
c.y=d.y;
}
private Shape getQuadrilateral(Point a,Point b,Point c,Point d){
GeneralPath gp=new GeneralPath();
gp.moveTo(a.x,a.y);
gp.lineTo(b.x,b.y);
gp.lineTo(c.x,c.y);
gp.lineTo(d.x,d.y);
gp.closePath();
return gp;
}
private void drawShape(Graphics2D g,Shape shape){
AffineTransform oldt=g.getTransform();
Rectangle2D bounds=shape.getBounds2D();
double height=bounds.getHeight();
double width=bounds.getWidth();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
g.translate(this.getWidth()/2,this.getHeight()/2);
g.translate(-width/2,-height/2);
g.draw(shape.getBounds2D());
g.draw(shape);
g.setTransform(oldt);
}
public void paintComponent(Graphics g2){
super.paintComponent(g2);
Graphics2D g=(Graphics2D)g2;
drawShape(g,trapezium);
//drawShape(g,parallelogram);
}
public static void main(String args[]){
JFrame jf=new JFrame();
TestPanel tp=new TestPanel();
jf.setLayout(new BorderLayout());
jf.add(tp,BorderLayout.CENTER);
jf.setSize(500,500);
jf.setVisible(true);
}
}
任何帮助,将不胜感激
编辑:
我只是从代码中删除了混乱的行...
参考方案
您需要考虑Shape的有界x / y位置:
Rectangle bounds=shape.getBounds(); // changed this
...
//g.translate(this.getWidth()/2,this.getHeight()/2);
//g.translate(-width/2,-height/2);
g.translate((this.getWidth() - width) / 2,(this.getHeight() - height) / 2);
g.translate(-bounds.x, -bounds.y); // added this
Java Swing SearchBox模型 - java
我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。Java swing-事件触发后,我可以在选项卡上更改名称吗? - java
一,代码:tab_textArea_file.addTab(docLabel, null, scrollPane_textArea, null); 因此,情况是我有一个可供用户选择的文件列表。用户单击文件时,将读取文件的内容并将其加载到textArea中。 “ docLabel”(在上面的代码中)是应该更改为所选文件名的字符串,但并非如此。是否可以通过上面的…Swing-典型桌面应用程序中的并发 - java
这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…Java:线程池如何将线程映射到可运行对象 - java
试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …JAVA:字节码和二进制有什么区别? - java
java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…
java panel 左对齐,将Shape的中心与JPanel的中心对齐 - java相关推荐
- java panel 左对齐,JPanel左对齐
我测试了下,把你的panel1.setAlignmentX(JPanel.LEFT_ALIGNMENT);改为 panel1.setLayout(new FlowLayout(FlowLayout.L ...
- 编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出。...
编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出. 题目描述 编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出. 输入描述 编写程序输入一个5x5的矩阵 ...
- align latex 使用_latex中使用listings时如何使matlab代码块居左而非居中,最好与上面的文本对齐...
## 编译环境 操作系统 * [x] Windows 7/8/10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [ ] TexLive `年份 ...
- java panel 所有事件_java-侦听/处理JPanel事件
先生们女士们晚上好, 我有一个Java Swing无法解决的问题,也许您可以帮助我.这里是: >我有一个使用BorderLayout的JFrame和许多JPanels. >每当我需要建 ...
- java jtextfield 居中_有什么办法可以使JFrame的中心居中吗? - java
我有自己的主框架和当有人选择菜单项时弹出的两个JDialogs.我想要的是一个带有一些规则,建议等的"帮助"对话框. setLayout(null)和Toolkit / Dimen ...
- Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP)
Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP) 说明:在微服务生鲜电商用户中心的系统设计中,我一直强调一个观点,就是你这个系统使用用户到底是TO B的还是TO C的呢?这个是 ...
- Java 深度历险(作者成富,是IBM 中国软件开发中心的高级工程师)
Java 深度历险(作者成富,是IBM 中国软件开发中心的高级工程师) http://blog.csdn.net/hnzhangshilong/article/details/7038009 2 ...
- java jdk 7_jdk1.7下载|Java Development Kit (JDK) 下载「64位」-太平洋下载中心
使用方法: 一.jdk1.7环境怎么配置? 1.右键计算机-->属性-->高级系统设置-->环境变量 jdk下载截图10 jdk下载截图11 2.在系统变量中新建 变量名:JAVA_ ...
- java 截取byte数组_2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家...
包含的模块 本文分为十九个模块,分别是:Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring ...
最新文章
- C语言程序设计 细节总结(第1-7章)
- 首颗“机器心”成功植入近四十年后,人造心脏终于又迎来颠覆变革
- DL之FAN:FAN人脸对齐网络(Face Alignment depth Network)的论文简介、案例应用之详细攻略
- sringboot security基本用法
- mysql join性能_Mysql Join语法解析与性能分析
- 开源硬件 可穿戴_11个出色的可穿戴开源项目
- python线程池回调函数_python回调函数中使用多线程的方法
- 关于对网络学习方法的一点见解
- Windows常用密码的破解方法
- ITIL事件管理流程设计
- netlogo-入门-学习记录
- MIUI刷Android原生,小米手机怎么刷安卓原生系统
- 解决 Permission denied: user=root, access=WRITE, inode=“/user“:hdfs:supergroup:drwxr-xr-x
- python saveas_如何使用Python SaveAs对话框
- python中实现简单抽样的函数
- 二分查找--天堂珍珠(珍珠项链)pearl
- 国内外RTI产品调查情况(转)
- 4G全网通模块 高通骁龙410系列-MSM8916(M9+) Cortex-A53架构
- 阿里云oos对象存储 上手快速入门
- 什么是哈希冲突?如何解决?
热门文章
- org/springframework/core/MethodClassKey
- HTML5拖放(drag and drop)与plupload的懒人上传
- Linux:终端自定义title
- Ubuntu14.04 + Matlab2014a + caffe + cuda + cudnn环境搭建
- Oracle调用webservice说明
- 国内外常用Linux服务器控制面板介绍
- 大话设计模式Python实现-简单工厂模式
- mysql恢复root密码
- Ionic2中集成第三方控件Sweetalert
- java.sql.SQLException: 关闭的 Resultset: next