在JPanel中渲染GUI按钮

时间:2009-07-30 04:43:41

标签: java graphics

考虑到我在左上角写了“文件”,然后如何在右上角添加按钮?

public class FileViewer extends JPanel
{
    private static final long serialVersionUID = 1L;

    public void paintComponent(Graphics g)
    {
        Graphics2D graphic = (Graphics2D)g;
        graphic.drawString("HTML File:", 14, 15);
    }
}

3 个答案:

答案 0 :(得分:7)

手工绘制你自己的所有组件会非常困难。

您最好使用为您绘制界面的现有组件。

在这种情况下使用swing你可以在JFrame上使用JFrame和JButton ......

像这样:

alt text http://img36.imageshack.us/img36/4337/imagen2rrq.png

这会容易得多。

以下是此示例的代码。显然只是一种品味。考虑阅读Swing tutorial

import javax.swing.JFrame;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.Box;
import javax.swing.JPanel;
import java.awt.BorderLayout;


public class SuchCode {
    public static void main( String [] args ) {
        JFrame frame = new JFrame("How can I... ");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

        JPanel panel = new JPanel();
        BoxLayout boxLayout = new BoxLayout( panel , BoxLayout.LINE_AXIS );
        panel.setLayout( boxLayout  );

        panel.add( new JLabel("File"));
        panel.add( Box.createHorizontalGlue() );
        panel.add( new JButton("Button"));

        frame.add( panel , BorderLayout.NORTH );

        frame.pack();
        frame.setVisible( true );
    }
}

阅读一下,做一个测试,然后尽可能多地回到这里。我很乐意帮助你(我打赌其他一些好的java家伙也会这样)。

答案 1 :(得分:1)

我将在这里走出困境,并假设你正在谈论与Swing(或SWT)的定位。

要智能地定位元素,您需要容器(窗口,面板等)具有布局管理器。布局管理器负责将子控件放在容器中。

例如,Java教程here展示了如何使用Java附带的许多标准布局管理器。还有一些不附带Java。特别感兴趣的是SWT,它具有更平台本地的外观和感觉。

更新

我看到你添加的东西我完全偏离了基础,因为你只是想找到一种方法将文本写入paintComponent中的图形句柄。

您已经有了部分答案:您已使用Graphics2D.drawString(String,x,y) xy指定要绘制的位置。

您需要做的是更改xy以在右上角绘制。实际上,只有x才需要改变。

这是棘手的地方。您必须根据工作区的大小计算文本字符串的大小来计算y

我不知道Java的具体细节,因为我从未完成过图形输出,但很可能是:

  • 您可以在graphic上调用一个方法来返回可用的绘制矩形;这样可以获得最大y值。
  • 您需要将字符串传递给另一个方法以获取所需的宽度(基于字体信息)。

一旦你同时拥有这两个,只需从第一个中减去第二个,你应该有一个起始y值以使字符串在右上角完成。

答案 2 :(得分:0)

您可以使用add()方法在构造函数中添加一个按钮。 您可能希望将对齐设置为右,以便按钮被绘制到右侧

paint方法通常不用于在屏幕上添加UI控件。

话虽如此,我希望您阅读其他人发布的关于您向我们提出问题的方式的评论。