java - Java swing:我调用了一次drawString,它多次打印了我的字符串
问题描述
我是 java swing 编程的新手。我想要做的是将字符串绘制到 JPanel 中的特定位置。JPanel 非常大,所以我将它添加到 JScrollpane 中,但是当我绘制字符串时,它不仅会打印在指定位置,还会打印在其他位置。
第一个图像代表我决定绘制字符串的面板底部,这是正确的。但是,如果您观察整个面板,您也可以在其他位置找到该字符串(参见第二张图片)。
有人能告诉我为什么会这样吗?我该如何预防?
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
class Example extends JFrame
{
private MyPanel gg=new MyPanel();
Example(){
add(new JScrollPane(gg));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
}
public static void main(String argv[]){
EventQueue.invokeLater(new Runnable() {
public void run() {
Example test=new Example();
test.setVisible(true);
}
});
return;
}
}
class MyPanel extends JPanel
{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
g2d.drawString("HI I LOVE ELON MUSK", 90, 300035);
return;
}
public Dimension getPreferredSize() {
return new Dimension(500, 300060);
}
}
解决方案
您的代码在我的 Windows 10 系统上运行良好。我有一个在 Java 8 上编译的 Java 13 JDK。
我对您的主要课程进行了一些更改。也许这些变化稳定了显示。在您的系统上运行我的代码并查看。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class LongJPanelExample {
public LongJPanelExample() {
JFrame frame = new JFrame("Long JPanel Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel gg = new MyPanel();
frame.add(new JScrollPane(gg));
frame.pack();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
public static void main(String argv[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new LongJPanelExample();
}
});
}
}
class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("HI I LOVE ELON MUSK", 90, 300035);
return;
}
public Dimension getPreferredSize() {
return new Dimension(500, 300060);
}
}
推荐阅读
- assembly - .data 数组中 MOVDQU 的“指令操作数必须相同大小”
- c# - EF Core 5 单属性投影
- django - 在 Django 框架中实现类似产品
- swift - 推断一个通用参数,指定其他参数
- r - 如何在R中绘制inc指数衰减?
- python - 从 python 将指标发送到 splunk
- assembly - 使用 lcd HD44780U LCD 4 位模式和 65c22 VIA 的问题(新手组装)
- python - 在不修改原始数据的情况下使用克隆数组数据的问题(Python)
- spyder - ModuleNotFoundError:没有名为“pyproj._network”的模块
- azure-devops - AzDo 构建管道以根据条件参数运行步骤模板