繁体   English   中英

使用graphics2d将文本字段添加到jframe

[英]Adding textfields to jframe using graphics2d

public class Contact {
   int x0,x1,y2=1500,x3=1500,a=0;
   JFrame jf;
   private JTextField name = new JTextField();
   private JTextField phone;
   private JButton start;
   boolean clicked=false;

   static Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
   static int w=(int)dim.getWidth();    static int h=(int)dim.getHeight();
   IntroInner d=new IntroInner();   int c;

   public Contact() {

   }

   public void build() throws Exception{

      jf=new JFrame("THE COUNTRY CLUB");
      jf.getContentPane().add(d);
      jf.setSize(w,h);
      jf.setVisible(true);
      jf.setAlwaysOnTop(true);
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
   }

   public class IntroInner extends JPanel{

      public void paintComponent(Graphics g1){

        Graphics2D g=(Graphics2D) g1;

        FontMetrics metrics = g.getFontMetrics();
        int xpos=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2-215;

        setFont(new Font("serif",Font.ITALIC,40));

        g.setColor(Color.black);
        g.fillRect(0,0,this.getWidth(),this.getHeight());

        Image im1=new ImageIcon("Images/bg.jpg").getImage();
        g.drawImage(im1,0,0,this);

        //g.rotate(a);
        Image im=new ImageIcon("Images/logo.png").getImage();
        g.drawImage(im,xpos,50,this);

        g.setColor(Color.white);

        g.drawString("Please Enter Your Details",400,400);

        g.drawString("Name:",400,475);

        g.drawString("Contact No:",400,550); 
     }
  }

  public static void main(String[] args) throws Exception{
      new Contact().build();
  }
}

我在java中使用graphics2d向java框架实现了文本字段。 但没有得到任何有用的意见。 我在stackoverflow中也找到了一些东西。 但这也没有帮助我。 任何人都可以帮助我。 该计划的预期成果如下:提前致谢。

在此输入图像描述

好的,所以你可能需要退一步看看这里的两个方面:

  • 一个方面是您可以直接在Graphics2D对象上绘图,打印字符串,绘制线条,填充矩形等等......虽然这在某些情况下非常有趣(例如,如果您想要执行非常自定义的绘图),是一种非常低级的方法。 你负责做很多事情。 如果您考虑处理文本字段,这意味着您必须绘制背景,边框,键入的字符串,制作闪烁的插入符号等等。这很容易变得非常麻烦和繁琐而无法维护
  • 另一方面是Swing提供了一堆组件,它已经完成了我刚刚谈到的所有繁琐的工作。 虽然它无法处理所有情况,但简单的情况,如标签,文本字段,图像等...已经有一个内置的实现,基本上避免了你自己做的繁琐的工作。 剩下的唯一事情就是解释您希望组件出现的方式和位置。 这是LayoutManager发挥作用的地方。

这是一个小例子(在许多其他中),它向您展示了做这样的事情的要点:

import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;


public class BasicSwingTest {

    protected void initUI() throws MalformedURLException {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel image  = new JLabel(new ImageIcon(new URL("http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Duke3D.png/220px-Duke3D.png")));
        frame.setLayout(new BorderLayout());
        frame.add(image, BorderLayout.WEST);
        JPanel mainPanel = new JPanel(new GridBagLayout());
        JPanel panel = new JPanel(new GridLayout(0, 2));
        panel.add(new JLabel("Name: "));
        JTextField name = new JTextField(20);
        panel.add(name);
        panel.add(new JLabel("Contact no: "));
        JTextField contactNumber = new JTextField(15);
        panel.add(contactNumber);
        panel.setBorder(BorderFactory.createTitledBorder("Enter your details"));
        mainPanel.add(panel);
        frame.add(mainPanel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new BasicSwingTest().initUI();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        });
    }


}

结果如下:

在此输入图像描述

这是第二个例子(看起来更像你的图像,虽然它需要一些调整):

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class BasicSwingTest2 {

    private static final Font FONT = new Font("Times New Roman", Font.PLAIN, 18);

    protected void initUI() throws MalformedURLException {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JLabel contentPane = new JLabel(new ImageIcon(new URL("http://www.pd4pic.com/images/blue-background-simple.jpg")));
        contentPane.setLayout(new BorderLayout());
        frame.add(contentPane, BorderLayout.CENTER);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.WEST;
        JPanel panel = new JPanel(new GridBagLayout());
        panel.setOpaque(false);
        JTextField name = new JTextField(20);
        JTextField contactNumber = new JTextField(15);

        panel.add(getLabel("Name: "), gbc);
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        panel.add(name, gbc);
        gbc.gridwidth = GridBagConstraints.RELATIVE;
        panel.add(getLabel("Contact no: "), gbc);
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        panel.add(contactNumber, gbc);

        JLabel topLabel = getLabel("Please enter you details");
        topLabel.setHorizontalAlignment(JLabel.CENTER);
        contentPane.add(topLabel, BorderLayout.NORTH);
        contentPane.add(panel, BorderLayout.CENTER);

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

    private JLabel getLabel(String text) {
        JLabel label = new JLabel(text);
        label.setFont(FONT);
        label.setForeground(Color.WHITE);
        return label;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new BasicSwingTest2().initUI();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM