ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在没有JLabel的Swing中显示文本

2019-06-25 16:47:33  阅读:162  来源: 互联网

标签:java swing jframe


我必须使用Swing创建一个Java程序,我想显示一些文本,但不使用JLabel(包括文本组件)!我必须扩展JFrame.我还有其他选择吗?

解决方法:

你不应该:

>不必要地扩展JFrame
>通过paint(..)直接绘制到JFrame

你应该:

>覆盖JComponents paintComponent(…)
>在paintComponent(…)中进行自定义绘制,
>将JComponent实例添加到JFrame

这是一个例子:

import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class DrawSimpleText {

    public DrawSimpleText() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DrawSimpleText();
            }
        });
    }

    private void initComponents() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new JPanel(true) {
            Font font = new Font("Serif", Font.PLAIN, 20);
            String s = "Java Source and Support";

            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D) g;

                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                g2.setFont(font);

                FontMetrics fm = g.getFontMetrics(font);

                int width = fm.stringWidth(s);

                Dimension d = getSize();

                //center String/text
                int cx = (d.width - width) / 2;
                int cy = (d.height - fm.getHeight()) / 2 + fm.getAscent();

                g2.drawString(s, cx, cy);
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(300, 100);
            }
        });
        f.pack();
        f.setVisible(true);
    }
}

更新:

根据你的评论虽然它反对所有Swing规则和我自己的道德:

但是,如果你仍然需要这样做(我无法理解为什么这只是不好的做法),这里是如何:

import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class DrawSimpleText extends JFrame {

    public DrawSimpleText() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new DrawSimpleText();
            }
        });
    }

    private void initComponents() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    Font font = new Font("Serif", Font.PLAIN, 20);
    String s = "Java Source and Support";

    @Override
    public void paint(Graphics g) {

        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setFont(font);

        FontMetrics fm = g.getFontMetrics(font);

        int width = fm.stringWidth(s);

        Dimension d = getSize();

        //center String/text
        int cx = (d.width - width) / 2;
        int cy = (d.height - fm.getHeight()) / 2 + fm.getAscent();

        g2.drawString(s, cx, cy);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 100);
    }
}

标签:java,swing,jframe
来源: https://codeday.me/bug/20190625/1287811.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有