2016-01-17 3 views
0

Новое на Java. Я не могу открыть раскрывающийся список.Java JComboBox не отображается

Первоначально у меня был код перед кнопкой, но когда я запустил код (идея intelliJ), ни падение, ни кнопка не появились.

stackoverflow хочет получить дополнительную информацию. Не знаю, что добавить. Я уверен, что это просто ошибка noobie в синтаксисе.

package com.example.guiTest; 

import javax.swing.*; 
import java.awt.*; 

import java.lang.Object; 
import java.awt.Component; 
import java.awt.Container; 
import javax.swing.JComponent; 
import javax.swing.JComboBox; 

public class Main { 

public static void main(String[] args) { 

    JFrame window = new JFrame("Position"); 
    window.setVisible(true); 
    window.setSize(500, 500); 
    window.setResizable(true); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
    window.setLocation(dim.width/2-window.getSize().width/2, dim.height/2-window.getSize().height/2);; 

    JPanel panel = new JPanel(); 
    panel.setLayout(null); 
    window.add(panel); 

    JLabel test = new JLabel("This is a test"); 
    test.setBounds(20,0,120,120); 
    panel.add(test); 

    JButton button = new JButton("Compile"); 
    button.setBounds(250, 250, 120, 50); 
    panel.add(button); 


    String[] noteArray = {"a", "b"}; 

    JComboBox note = new JComboBox(noteArray); 
    note.setPreferredSize(new Dimension(200,130)); 
    note.setLocation(new Point(200,200)); 
    note.setEditable(true); 
    note.setSelectedIndex(3); 
    note.setVisible(true); 

    panel.add(note); 






} 

}

+0

Почему вы пытаетесь изменить свой ответ? Это не очень хорошая вещь, потому что это по сути отрицает мой ответ. Вместо этого отправьте комментарий, если вам нужно общаться со мной. –

ответ

3

Вы используете null расположение на панели JPanel, и быстрый ответ, что нулевые макеты требуют, чтобы вы полностью указать размер и расположение всех добавленных компонентов, это размернеpreferredSize. Вы устанавливаете последнее, а не первое.

Лучшим ответом является использование схемы null и setBounds(...). Хотя нулевые макеты и setBounds() могут показаться новичкам Swing, как самый простой и лучший способ создания сложных графических интерфейсов, чем больше Swing GUI вы создадите более серьезные трудности, с которыми вы столкнетесь при их использовании. Они не будут изменять размеры ваших компонентов при изменении размера графического интерфейса, они являются королевской ведьмой для улучшения или поддержки, они полностью не выполняются при размещении в scrollpanes, они выглядят ужасно ужасно при просмотре на всех платформах или разрешениях экрана, отличных от исходного ,

Редактировать:
или вы в конечном итоге разместите свой JComboBox прямо над своим JButton (как ваш код!).

Редактировать:
Другая проблема: не назовите setVisible(true) на вашем JFrame, пока не добавите все компоненты в графический интерфейс.

Edit:
И еще другой вопрос: note.setSelectedIndex(3);
Выпадающий список банкноты имеют только 2 пунктов в нем, так почему вы пытаетесь установить выбранный индекс до 3? Это гарантированно провалится.

Так, например:

import java.awt.BorderLayout; 
import javax.swing.*; 

public class BetterMain extends JPanel { 
    private static final String[] ITEMS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; 
    private static final int ROWS = 25; 
    private static final int COLUMNS = 40; 
    private JButton button = new JButton("Button"); 
    private JTextField textField = new JTextField(COLUMNS/2); 
    private JComboBox<String> myCombo = new JComboBox<>(ITEMS); 
    private JTextArea textArea = new JTextArea(ROWS, COLUMNS);  

    public BetterMain() { 
     JPanel topPanel = new JPanel(); 
     topPanel.add(new JLabel("This is a JLabel")); 
     topPanel.add(myCombo); 
     topPanel.add(textField); 
     topPanel.add(button); 

     JScrollPane scrollPane = new JScrollPane(textArea); 

     setLayout(new BorderLayout()); 
     add(scrollPane, BorderLayout.CENTER); 
     add(topPanel, BorderLayout.PAGE_START); 
    } 

    private static void createAndShowGui() { 
     BetterMain mainPanel = new BetterMain(); 

     JFrame frame = new JFrame("BetterMain"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 
Смежные вопросы