2015-04-12 74 views
-2

我知道我仍然需要將字符串轉換爲int,併爲providerID和providerPrice加倍,以便我可以設置它們並稍後存儲它們;我希望我能弄清楚這一點。我似乎無法找到的是如何使JLabel正確對齊。 cloudBack標籤應該是主背景,並且每一組JLabel和JTextField都應位於與主背景重疊的單獨行上,底部有3個JButton。我如何讓他們在正確的地方去?順便說一句,源.png是400x224像素 包newProvider;如何強制重疊JLabels

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

/*@Michael Christopher, author/owner */ 
public class NewProvider { 
/** @param args the command line arguments*/ 
public static void createGUI() { 
    // Create the window 
    JFrame mainFrame = new JFrame ("NewProvider"); 
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Create the MenuBar 
    JMenuBar maintenanceMenuBar = new JMenuBar(); 
    maintenanceMenuBar.setOpaque(true); 
    maintenanceMenuBar.setBackground(new Color(176,224,230)); 
    maintenanceMenuBar.setPreferredSize(new Dimension(400, 20)); 

    //create variables 
    int providerID; 
    String providerName; 
    Double providerPrice; 
    int addProviderCheck; 
    String[] options = {"Yes","No"}; 

    //create image icon, labels, and JTextFields 
    JLabel cloudBack; 
    cloudBack = new JLabel (new ImageIcon("images/CloudBack.png")); 
    JLabel labelID = new JLabel ("New ProviderID"); 
    JTextField textID = new JTextField("providerID \n", 10); 
    JLabel labelName = new JLabel ("New Provider Name"); 
    JTextField textName = new JTextField("Provider Name \n", 20); 
    JLabel labelPrice = new JLabel ("New Provider Price"); 
    JTextField textPrice = new JTextField ("Price \n", 5); 
    //make Submit, Clear, & Exit buttons 
    JButton submit = new JButton("Submit"); 
    JButton clear = new JButton("Clear"); 
    JButton exit = new JButton("Exit"); 

    /*Set the FlowLayout to arrange the window, setting labels, text fields, 
    menubar, background, and orientation*/ 
    FlowLayout newProviderLayout = new FlowLayout(); 
    mainFrame.setLayout(newProviderLayout); 
    mainFrame.setJMenuBar(maintenanceMenuBar); 
    mainFrame.add(cloudBack, BorderLayout.CENTER); 
    mainFrame.add(labelID); 
    mainFrame.add(textID); 
    mainFrame.add(labelName); 
    mainFrame.add(textName); 
    mainFrame.add(labelPrice); 
    mainFrame.add(textPrice); 
    mainFrame.add(submit); 
    mainFrame.add(clear); 
    mainFrame.add(exit); 

    //ActionListener for Submit button 
    submit.addActionListener(new ActionListener() 
    {   public void actionPerformed(ActionEvent e) { 
        String ID = textID.getText(); 
        String Name = textName.getText(); 
        String Price = textPrice.getText(); 
      int submitPress = JOptionPane.showOptionDialog(null, 
    "ProviderID: " + ID + "\n" + "Provider Name: " + Name +"\n" + "Provider Price: " + Price, 
    "Please Verify Content",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE,null, options,options[0]); 
if (submitPress <= 0) {     
    //Store Displayed data 
    System.out.println(ID); 
    System.out.println(Name); 
    System.out.println(Price); 
    /*providerID = ID; 
    providerName = Name; 
    providerPrice = Price; */ 
    textID.setText("Confirmed"); 
} 
else if (submitPress > 0) {  
      textID.setText("providerID"); 
      textName.setText("Provider Name"); 
      textPrice.setText("Price"); } 
     } 
    }); 
    //ActionListener for clear button 
    clear.addActionListener(new ActionListener() 
    { @Override 
     public void actionPerformed(ActionEvent e) { 
      textID.setText("providerID"); 
      textName.setText("Provider Name"); 
      textPrice.setText("Price"); } 
    }); 
    //ActionListener for Exit Button 
    exit.addActionListener(new ActionListener() 
    { @Override 
     public void actionPerformed(ActionEvent e) { 
      mainFrame.setVisible(false); 
      mainFrame.dispose(); } 
    }); 
//verify intent to add new provider to system before continuing 
addProviderCheck = JOptionPane.showOptionDialog(null, 
    "This will add a new service provider to the database.\n" 
    + "Are you sure you wish to continue?", 
    "Please Verify Intent",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null, options,options[0]); 
if (addProviderCheck <= 0) { 
       //Display Window 
    mainFrame.pack(); 
    mainFrame.setSize(400, 400); 
    mainFrame.setVisible(true);} 
else { //else close app 
    mainFrame.setVisible(false); 
    mainFrame.dispose(); 
} 
} 
public static void main(String[] args){ 
    //draw and show the GUI 
    javax.swing.SwingUtilities.invokeLater(() -> { 
     createGUI(); 
    });   
    //store new provider data 
    } 
} 
+0

請注意,您已發佈不可編譯的代碼。請解決這個問題。 –

+1

對於[示例](http://stackoverflow.com/questions/24176008/background-image-for-a-jpanel-not-working/24176183#24176183),[示例](http://stackoverflow.com/questions/22162398/how-to-set-a-background-picture-in-jpanel/22162430#22162430),[example](http://stackoverflow.com/questions/18393971/having-images-as-background-of- jpanel/18394047#18394047) – MadProgrammer

+0

@Hovercraft Full Of Eels - package newprovider;應該是在代碼塊中作爲頂線;除此之外,這是我的工作代碼的副本>粘貼 - 是你的意思還是有更大的問題,我失蹤了? MadProgrammer - 查看你的例子,ty。氣墊船的第二個答案 - 謝謝。我今天要花費JPanel和paintComponent,以及你引用的其他2個佈局。 –

回答

2

代替displayiing在JLabel你CloudBack.jpg,可以考慮使用g.drawImage(...)繪製它在JPanel的paintComponent的方法裏面,然後把你的其他組件到該畫的JPanel。請注意,如果您將其他JPanel添加到繪圖JPanel中,請確保通過setOpaque(false)將非繪製JPanel設置爲非透明。

我還建議您不要使用FlowLayout作爲您的主要GUI佈局,因爲它不會以愉悅,易於使用和查看的方式添加組件。除BorderLayout之外,請考慮使用GridBagLayout或MigLayout。

+0

我已經修復了所有功能,儘管我還沒有進行佈局更改 - 我必須明天查看JPanels。除此之外,通過使用drawImage和GridBagLayout實現JPanel可以創建新代碼中的任何問題? (我看起來那部分大聲笑) - 編輯 - 我不能發佈新的代碼,因爲它太長的評論...建議? –