2013-10-08 140 views
2
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


public class Dummy{ 
    String newSelection = null; 

    public void init(){ 
     JFrame jFrame = new JFrame("Something"); 
     jFrame.setVisible(true); 
     jFrame.setSize(new Dimension(600, 600)); 
     jFrame.setLayout(null); 
     jFrame.setBackground(Color.BLACK); 

     final String[] possibleNoOfPlayers = {"Two","Three"}; 

     final JComboBox comboBox = new JComboBox(possibleNoOfPlayers); 
     newSelection = possibleNoOfPlayers[0]; 
     comboBox.setPreferredSize(new Dimension(200,130)); 
     comboBox.setLocation(new Point(200,200)); 
     comboBox.setEditable(true); 
     comboBox.setSelectedIndex(0); 
     comboBox.setVisible(true); 
     comboBox.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent actionEvent) { 
       JComboBox box = (JComboBox) actionEvent.getSource(); 
       newSelection = (String) box.getSelectedItem(); 
       System.out.println(newSelection); 
      } 
     }); 
     jFrame.add(comboBox); 
    } 
} 

我想添加组合框到框架。但它不可见。如果你点击位置,它会显示选项。但它不可见。请让我知道如果我错过了它的东西。为什么jcombobox不可见?

回答

4

三样东西......

  1. 你帧之前你添加它
  2. 您使用null布局
  3. 你没有为comobox设置大小你叫setVisible,这将意味着它将(有效)呈现为0x0大小。 (PS-setPreferredSize是不是做你认为它应该)...

解决宜先...

呼叫setVisible最后并使用相应的布局管理器

+0

It Worked !!!。谢谢 –

1

使用这一个..

package oops; 

import java.awt.BorderLayout; 

public class jframe extends JFrame { 

private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       jframe frame = new jframe(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public jframe() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JComboBox comboBox = new JComboBox(); 
    comboBox.setBounds(159, 81, 189, 41); 
    contentPane.add(comboBox); 
} 
} 
+2

1.如果没有对原因的解释,将代码转储给未知用户永远不会特别有用。 2.当处理基于组件的UI时,'null'布局永远不会是推荐的解决方案... – MadProgrammer

+1

是的,他正在使用.... JFrame jFrame = new JFrame(“Something”); jFrame.setVisible(true); jFrame.setSize(new Dimension(600,600)); jFrame.setLayout(null); jFrame.setBackground(Color.BLACK); 它必须是这样的.... JFrame jFrame = new JFrame(“Something”); jFrame.setSize(new Dimension(600,600)); jFrame.setBackground(Color.BLACK); jFrame.setVisible(true); jFrame.setLayout(NULL); –

+0

哎呀对不起....可能希望你不要.. –