2014-10-19 95 views
1
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框架的文本框的實現。但沒有得到任何有用的意見。我也在這裏找到了一些東西。但那也沒有幫助我。任何人都可以幫助我。該計劃的預期產出如下:預先致謝。使用graphics2d將文本字段添加到jframe

enter image description here

+0

您是否可以解釋爲什麼當您已經有完整的功能組件可以爲您完成這項工作時,請執行此操作? – MadProgrammer 2014-10-19 20:32:12

+0

'我在java中使用graphics2d來實現textfield到java框架 - 我完全不知道這個語句的含義。圖形用於在GUI上繪製某些東西。文本字段用於接受鍵盤輸入。這兩個概念是如何相關的? – camickr 2014-10-19 21:23:20

回答

3

OK,所以你可能需要在這裏退一步,看到了兩個方面:

  • 一個方面是,你可以直接在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(); 
       } 
      } 
     }); 
    } 


} 

而且結果:

enter image description here

這是第二個例子(看起來更像你的形象,雖然它需要一些調整):

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(); 
       } 
      } 
     }); 
    } 

} 
+0

感謝您的即時幫助。但請您再次檢查我的問題。它是graphics2d的一部分。 – 2014-10-19 18:54:25

+0

@thampijoseph對不起,但我不明白你爲什麼要這麼努力與graphics2d合作。你應該仔細地重新閱讀我的答案,試着理解它說的是什麼。您不需要使用Graphics2D來實現您展示的圖片。使用Swing組件可以很容易地實現它。 – 2014-10-19 18:56:59

+0

這是我從客戶端獲得的要求,他們還沒有準備好妥協:( – 2014-10-20 03:58:37