2010-06-25 73 views
0

首先,我真的是Java Swing/AWT的新手,并且不会错综复杂地熟悉JFrame,JPanel & JButton的工作原理。我只想用一些文本和几个JButton来显示一个简单的弹出式对话框,当两个按钮中的任何一个被点击时它都应该退出。我有大部分在这个类逻辑的,但是我仍然在努力使对话框显示:(简单的JFrame对话框显示JButton

任何想法我可能是做错了:

public class UpgradePopupWindow extends JFrame implements ActionListener { 

static final long serialVersionUID = 0; 


final String upgrade = "Continue Upgrade"; 
final String restore = "Restore"; 

JPanel panels; 
JButton flashMe; 
JButton helpMe; 
JTextArea Message; 
JFrame newFrame; 
FlasherThread flash; 

    protected JTextArea addText(String text, boolean visible, int fontStyle) { 

    JTextArea textArea = new JTextArea(text); 

    textArea.setFont(new Font("SansSerif", fontStyle, 12)); //$NON-NLS-1$ 

    textArea.setLineWrap(true); 
    textArea.setWrapStyleWord(true); 
    textArea.setEditable(false); 
    textArea.setBackground(Color.DARK_GRAY); 
    textArea.setForeground(Color.WHITE); 
    textArea.setOpaque(false); 
    textArea.setVisible(visible); 
    textArea.setAlignmentX(Component.CENTER_ALIGNMENT); 

    add(textArea); 

    return textArea; 
} 

public UpgradePopupWindow(Object ft) { 
    super("PopUp Dialog"); 
    flash = (FlasherThread)ft; 
    String text = "An error occurred during the attempt to update your software. We recommend the following: (1) Restore your phone to its previous version, If you continue with the current update, only your previously backed-up data will be available."; 
    //addFiller(5); 
    JLabel label = addLabel(text, Font.PLAIN, 12); 
    //addText(text, true, Font.PLAIN); 
    //addFiller(20); 
    //newFrame = frame; 
    JPanel cards = new JPanel(); 
    cards.setLayout(null); 
    cards.setOpaque(false); 

    cards.setBounds(400, 200, 250, 150); 
    cards.add(label); 
    flashMe = new JButton(upgrade); 

    flashMe.setActionCommand("upgrade"); 
    flashMe.addActionListener(this); 
    flashMe.setEnabled(true); 
    cards.add(flashMe); 
    //add(flashMe); 


    helpMe = new JButton(restore); 
    helpMe.setActionCommand("restore"); 
    helpMe.addActionListener(this); 
    helpMe.setEnabled(true); 
    //add(helpMe); 
    cards.add(helpMe); 
    setContentPane(cards); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    //setOpaque(true); 
    //newFrame.setContentPane(this); 
    pack(); 
    //setVisible(true); 
} 

    protected JLabel addLabel(String text, int fontStyle, int size) { 
    JLabel label = new JLabel(text); 
    label.setFont(new Font("SansSerif", fontStyle, size)); 
    label.setAlignmentX(Component.CENTER_ALIGNMENT); 
    label.setOpaque(false); 
    label.setVisible(true); 
    //label.setForeground(Color.BLUE); 

    //add(label); 
    return label; 
} 

    protected void addFiller(int size) { 
    /* 
    * create some space before the progress bar 
    */ 
    Dimension diminsion = new Dimension(size, size); 
    Filler filler = new Filler(diminsion, diminsion, diminsion); 
    filler.setAlignmentX(Component.CENTER_ALIGNMENT); 

    add(filler); 
} 

    public void actionPerformed(ActionEvent e) { 

    if("restore".equals(e.getActionCommand())) { 
     System.out.println("restore button selected"); 
     //flash.setUpgradeRestoreChoice("restore"); 
     //newFrame.dispose(); 
     dispose(); 
    } else if ("upgrade".equals(e.getActionCommand())) { 
     System.out.println("upgrade button selected"); 
     flash.setUpgradeRestoreChoice("upgrade"); 
     //newFrame.dispose(); 
     dispose(); 
    } 
} 

} 
+1

你为什么要注释掉setVisible(true)?另外,你能显示创建对话框的代码吗(你的主要方法也许?) – 2010-06-25 21:11:43

+0

可能的重复[为什么我的简单JFrame显示奇怪? ](http://stackoverflow.com/questions/3121504/why-is-my-simple-jframe-displaying-weird) – trashgod 2010-06-26 00:58:56

回答

2

您应该使用JOptionPane代替滚动你自己的。