JFrame, не работающий правильно

Это делает меня очень сердитым, я работал над этим в течение 2 дней, имею 2 открытые книги и просмотрел их и ВСЕ ЕЩЕ не могу заставить эту программу выполнять способ, которым я хочу выполненный. Я перехожу к сути дела, где, если это не помогает, я вышел.

Я хочу приложение ПРОСТОГО КАДРА. Этому центрировали JComboBox наверху. Рядом с ним текстовое поле, достаточно большое для показа числовых цифр такой, поскольку на 49,99$ ниже его место для Текстовой области, показывающей, что условия предоставления услуг Ниже этого являются флажком, соглашающимся на условия предоставления услуг Ниже этого, 2 кнопки "Accept" и "Decline"

Я работал над этим в течение 2 дней, вот кодирование:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

Править: Забыл добавлять вторую программу

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

Как я заставляю это иметь все, где я хочу это и обнаруживаюсь? Я очень смущен из-за этого и теперь едва даже добираюсь, как работают Кадры.

1
задан kleopatra 15 December 2011 в 15:07
поделиться

4 ответа

Компоненты в Swing должны располагаться в определенном порядке.

Вы начинаете с JFrame. Единственные компоненты, которые помещаются в JFrame, - это JMenuBar и JPanel. Вы не добавляете никаких других компонентов в JFrame. Вы добавляете компоненты в JPanel.

Вот код Ника, реорганизованный для определения компонентов в правильном порядке. Я использовал GridLayout, потому что это было быстрее. Вы должны использовать GridBagLayout, как сказал Нивас.

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

Я переместил код JMenuBar в отдельный метод, поэтому, надеюсь, остальную часть кода будет легче понять.

У меня есть основная JPanel, в которую добавлены все остальные компоненты.

Я использовал другую панель JPanel для хранения двух ярлыков JLabel и кнопки JButton.

Я использовал третью панель JPanel для хранения JComboBox.

Основной шаблон выглядит следующим образом:

  • Определите JPanel.
  • Определите компоненты.
  • Добавьте компоненты в JPanel.
  • Добавить JPanel в главную JPanel
  • Добавить главную JPanel в JFrame.
1
ответ дан 2 September 2019 в 23:42
поделиться

1. Ваша вторая программа не компилируется. Вы пытаетесь назначить JFrame для JPanel.

Должно было быть

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2. Оно работает. То, что вы хотите, есть. Но не так, как вы этого хотите, потому что вы не сказали java, как вы хотите, чтобы он отображался. Попробуйте использовать LayoutManager , например GridBagLayout .

Если вы спешите создать графический интерфейс, попробуйте среду IDE, например NetBeans, которая упрощает вашу работу с помощью перетаскивания.

РЕДАКТИРОВАТЬ:

Пример:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestN();
    }
}

Заявление об ограничении ответственности: это базовый пример, просто чтобы дать пример. Не означает производственный код; -)

0
ответ дан 2 September 2019 в 23:42
поделиться

У вас есть:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

Каждый объект Bar наследуется от JFrame (то есть объект Bar ] тип JFrame ), но вы передаете другой объект JFrame (параметр frame ) в конструкторе. Затем вы вызываете некоторые методы объекта Bar , такие как добавление двух объектов JLabel , а также некоторые из переданных JFrame , например ] setVisible и setSize методы.

Итак, у вас есть два разных объекта JFrame , и вы проделываете некоторую работу с каждым из них, и только один из них когда-либо установлен как видимый.

Похоже, что единственная причина, по которой вы передаете JFrame конструктору, - это установка заголовка окна. Если передать String с заголовком в конструктор Bar , а затем вызвать super (title); в качестве первой строки Bar , тогда вам вообще не понадобится переданный JFrame

0
ответ дан 2 September 2019 в 23:42
поделиться

Ник. Я думаю, что первое, что вам нужно прояснить, - это точно знать, чего вы хотите.

Я помог вам в этом вопросе https: //stackoverflow.com/questions/3055777/how-to -...

Судя по тому, что вы описываете, у вас уже есть то, что вам нужно. Что в этом плохого:

alt text

Итак, я действительно думаю, что вы должны четко описать то, что вы хотите, чтобы получить это.

Мы поможем вам, но вы должны четко определить, в чем ваша проблема.

1
ответ дан 2 September 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: