Java Graphics는 인터페이스에서 텍스트 표시와 줄 바꿈을 어떻게 실현합니까?
구현 효과
문제는 줄 바꿈이 잘 안 된다는 점
호출 시 처리하고 싶은 문자 표시
구현 코드
Main.java
public class Main { public static void main(String[] strings) { String poem = "破阵子·为陈同甫赋壮词以寄之\r\n" + "作者:辛弃疾\r\n" + "\r\n" + "醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n" + "马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!"; AlgoFrame frame = new AlgoFrame("Java",poem, 600, 600); System.out.print("行路难,行路难,多歧路,今安在?\n" + "醉里挑灯看剑,梦回吹角连营"); } }
AlgoFrame.java
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import javax.swing.*; public class AlgoFrame extends JFrame { private int canvasWidth; private int canvasHeight; public AlgoFrame(String title, String poem, int canvasWidth, int canvasHeight){ super(title); this.canvasHeight = canvasHeight; this.canvasWidth = canvasWidth; // AlgoCanvas canvas = new AlgoCanvas(); AlgoCanvas canvas = new AlgoCanvas(poem); setContentPane(canvas); pack(); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public AlgoFrame(String title){ this(title, "", 1024, 768); } public int getCanvasWidth(){return canvasWidth;} public int setCanvasHeight() {return canvasHeight;} private class AlgoCanvas extends JPanel{ Font pf = new Font("Helvetica", Font.BOLD,20); String poem = ""; // String poem = "破阵子·为陈同甫赋壮词以寄之\r\n" // + "作者:辛弃疾\r\n" // + "\r\n" // + "醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n" // + "马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!"; public AlgoCanvas (String strs) { this.poem = strs; } @Override public void paintComponent(Graphics gra) { Graphics2D graphics2d = (Graphics2D)gra; int strokeWidth = 5; graphics2d.setStroke(new BasicStroke(strokeWidth)); graphics2d.setColor(Color.RED); Ellipse2D circle = new Ellipse2D.Double(60, 60, 300, 300); graphics2d.draw(circle); graphics2d.setColor(Color.BLACK); Rectangle2D rect = new Rectangle2D.Double(50, 50, 320, 320); graphics2d.draw(rect); graphics2d.setColor(Color.blue); Ellipse2D circle2 = new Ellipse2D.Float(80, 80, 260, 260); // graphics2d.draw(circle2); graphics2d.fill(circle2); // 显示辛弃疾的词 graphics2d.setColor(Color.black); // graphics2d.setFont(pf); // graphics2d.drawString(poem, 10, canvasHeight-100); drawStringWithFontStyleLineFeed(graphics2d,poem, 10, canvasHeight-100, pf); } @Override public Dimension getPreferredSize() { // System.out.println("running"); return new Dimension(canvasWidth, canvasHeight); } //字符串总宽度 private int getStringLength(Graphics g, String str) { char[] strcha=str.toCharArray(); int strWidth = g.getFontMetrics().charsWidth(strcha, 0, str.length()); System.out.println("字符总宽度:"+strWidth); return strWidth; } // //每一行字符串宽度 自定义 也就是画布中一行的宽度 // int rowWidth=1110; // //字符串字符的个数 // int strnum= str.length(); // //每一行字符的个数 private int getRowStrNum(int strnum,int rowWidth,int strWidth) { int rowstrnum=0; rowstrnum=(rowWidth*strnum)/strWidth; System.out.println("每行的字符数:"+rowstrnum); return rowstrnum; } //字符行数 private int getRows(int strWidth,int rowWidth){ int rows=0; if(strWidth%rowWidth>0){ rows=strWidth/rowWidth+1; }else{ rows=strWidth/rowWidth; } System.out.println("行数:"+rows); return rows; } //字符高度 private int getStringHeight(Graphics g) { int height = g.getFontMetrics().getHeight(); System.out.println("字符高度:"+height); return height; } // 注意设置font 才能计算宽度和高度 // 开始绘制 private void drawStringWithFontStyleLineFeed(Graphics g, String strContent, int loc_X, int loc_Y, Font font) { g.setFont(font); //获取字符串 字符的总宽度 int strWidth = getStringLength(g,strContent); //每一行字符串宽度 int rowWidth = 500; System.out.println("每行字符宽度:"+rowWidth); //获取字符高度 int strHeight=getStringHeight(g); //字符串总个数 System.out.println("字符串总个数:"+strContent.length()); if(strWidth>rowWidth){ int rowstrnum=getRowStrNum(strContent.length(),rowWidth,strWidth); int rows= getRows(strWidth,rowWidth); String temp=""; for (int i = 0; i < rows; i++) { //获取各行的String if(i==rows-1){ //最后一行 temp=strContent.substring(i*rowstrnum,strContent.length()); }else{ temp=strContent.substring(i*rowstrnum,i*rowstrnum+rowstrnum); } if(i>0){ //第一行不需要增加字符高度,以后的每一行在换行的时候都需要增加字符高度 loc_Y=loc_Y+strHeight; } g.drawString(temp, loc_X, loc_Y); } }else{ //直接绘制 g.drawString(strContent, loc_X, loc_Y); } } } }
위 내용은 Java Graphics는 인터페이스에서 텍스트 표시와 줄 바꿈을 어떻게 실현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
