2015-04-12 77 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可以创建新代码中的任何问题? (我看起来那部分大声笑) - 编辑 - 我不能发布新的代码,因为它太长的评论...建议? –