【问题标题】:How to draw a roundedRectangle with text inside a class extending JPanel如何在扩展JPanel的类中绘制带有文本的roundedRectangle
【发布时间】:2015-09-19 09:34:10
【问题描述】:

我是 Java 新手,我正在尝试扩展 JPanel 的类。我有一个 updateView() 方法,假设在 JPanel 的中间绘制带有文本的圆角矩形。此外,我需要将文本字段和圆角矩形存储在 LinkedHashMap 中。我已经得到了一个 var,我只是不知道我需要使用什么类型的 var。

我一直在寻找解决方案,但我找到的所有答案要么对我来说过于复杂,要么不适用于我的情况。

我知道这几乎没什么,但这是我到目前为止所得到的......

package game;

import javax.swing.JPanel;

public class GameNumView extends JPanel
{

    private Map<Integer,Integer> backgroundText = new LinkedHashMap<"My rounded rectangle","My textfield">();

    public GameNumView()
    {

    }

    public void UpdateView(String[] pNumbers)
    {
        //Create the background

        //Create the text

    }   
}

【问题讨论】:

  • 你有什么问题?如果您正在寻找实现细节,我们需要知道您使用什么库来进行渲染以便提供解决方案。
  • 我只是不知道从哪里开始。我应该扩展什么类以使我能够在我的 JFrame 类中使用方法 add()。你如何在这样的类中画一个圆角矩形?我不知道如何更精确。
  • 那么从头开始创建自己的按钮对您来说将很困难。您不仅必须渲染按钮(这意味着学习如何在 Java 中绘制),还需要拦截用户输入以激活该按钮。祝你好运。从这里开始:docs.oracle.com/javase/tutorial/2d/geometry/primitives.html
  • 实际上,我真的只是想绘制我的按钮,但不检测他何时单击它或类似的东西。我处于一种特殊情况,我只需要我的按钮看起来像一个按钮,而不是像一个按钮。它实际上只是一个视觉元素,仅此而已。
  • 可能exampleexample

标签: java text jpanel shape


【解决方案1】:

我会给你正确的道路。您可以自行调整它以适应您现有的代码。

这个想法是将 Graphics 对象与 JPanel 扩展类的 paintComponent 方法一起使用。

这里是代码,我觉得很清楚,但如果您有任何问题,请不要犹豫。

MyFrame 类:

public class MyFrame extends JFrame {
  public MyFrame(){             
    this.setTitle("Hello");
    this.setSize(200, 200);
    this.setLocationRelativeTo(null);               

    MyPanel pan = new MyPanel();
    pan.setBackground(Color.ORANGE);        
    this.setContentPane(pan);               
    this.setVisible(true);
  }      

  public static void main(String[] args) {
        MyFrame f = new MyFrame();
    }
}

这里是 MyPanel 类:

public class MyPanel extends JPanel{

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.black);
        g.drawRoundRect(10, 10, this.getWidth()-20, this.getHeight()-20, 15, 15);
        g.setColor(Color.black);
        g.drawString("Hello", 75, 75);
    }

}

这是你应该拥有的图片:

【讨论】:

  • 你打破了油漆链,这将导致无穷无尽的问题。通常,您应该避免从 JFrame 扩展,它会将您锁定在单个用例中,并且您并没有真正向该类添加新功能。您应该从 EDT 的内容中启动 ui
  • 我知道提出这个解决方案需要基础知识。我是摇摆新手,还没有开始学习 EDT,但我会记住这一点。感谢您的建议。你对这个问题有什么想法吗?
  • 是的,我在 cmets 中添加了几个指向以前类似问题的链接
  • 谢谢。确实,很有趣。
  • 我的情况发生了一些变化。我的课程扩展了 JPanel,我有一个 updateView() 方法,同时在我的 JPanel 中绘制了一些矩形。我怎么做你做的同样的事情,但在那个函数里面。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2018-02-25
  • 2014-06-26
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多