【问题标题】:Is there any way to display text without JLabel or JTextField in java swing?有没有办法在 java swing 中显示没有 JLabel 或 JTextField 的文本?
【发布时间】:2014-01-14 05:18:56
【问题描述】:

我正在创建 Swing 项目,但我想知道是否有任何方法可以在不使用 JLabelJTextField 的情况下打印文本。

我发现文本字段可能是其中一个,但它不像JLabel 那样整洁。 (文本周围有一个边框)。

文本字段的边框可以去掉吗?或者还有其他方法可以使用吗?

【问题讨论】:

  • 看看这个[如何设置文本字段的样式,使其没有边框?][1] [1]:stackoverflow.com/questions/2281937/…
  • 我认为你可以重写paint方法并在组件上绘制它。背景将是透明的,没有边框我认为这就是你要找的
  • 1) if there's any way to print text without using JLable or JtextField. 查看所有扩展 JTextComponent 2)Can a border in the TextField be removed? 是的组件

标签: java swing jtextfield


【解决方案1】:

“我想知道是否有任何方法可以在不使用 JLable 或 JtextField 的情况下打印文本”

您总是可以在 JPanel 中绘制文本。需要做更多的工作,但您可以对文本做更多的事情。

public class TextPanel extends JPanel{
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawString("Hello, Stackoverflow!", xLocation, yLocation);
    }
}

Drawing Text with Graphics

【讨论】:

  • 这可能是 90% 的 Swing 程序员的某种病:当他们制作自己的组件时,他们总是扩展 JPanel 而不是 JComponent。为什么?
  • 对于可以使用标签或文本字段在几行代码中完成的事情似乎有很多“繁重的工作”..
  • 好吧,OP 并没有真正描述他们想要做什么。我只是在上面引用中回答问题:)
  • 嗯,我是 Swing 的新手,所以我的一个朋友给了我一个任务来完成。我认为他试图教我如何“绘制”文本,而不仅仅是“打印”。还是谢谢大家:)
【解决方案2】:

您似乎在寻找JComponent.setBorder(null)。但是有很多方法可以达到你想要的效果..

  1. 不透明 JLabel 带有 BG 颜色。
  2. 自定义绘制组件..

这是两个标准组件的示例。

import java.awt.*;
import javax.swing.*;

class TextFieldNoBorder {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                String s = "Text without borders..";
                JPanel gui = new JPanel(new GridLayout(0,1,5,5));

                JTextField tf = new JTextField(s, 20);
                tf.setBorder(null);

                gui.add(tf);

                JLabel l = new JLabel(s);
                l.setOpaque(true);
                l.setBackground(Color.YELLOW);
                gui.add(l);

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

    【解决方案3】:

    你可以用这个!

    JTextField textField = new JTextField();
    textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());
    

    这会将空边框设置为您的TextField

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多