Как добавить JButton в JFrame?

Я попытался добавить кнопку на JFrame, но она почему-то не появляется. Как мне сделать так, чтобы оно появилось?

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.*;

public class GraficoconArreglo extends javax.swing.JFrame {
 JPanel pan = (JPanel) this.getContentPane();
 JLabel []lab = new JLabel[6];
 JTextField []text = new JTextField[6];
 Border border = BorderFactory.createLineBorder(Color.pink,1);
 JButton b = new JButton("Calculate");

public GraficoconArreglo() {
    initComponents();
    pan.setLayout(null);
    pan.setBackground(Color.GRAY);
    for(int i=0; i<lab.length ;i++){
        lab[i] = new JLabel();
        text[i] = new JTextField();

        lab[i].setBounds(new Rectangle(15,(i+1)*40, 60, 25));
        lab[i].setText("Data " + (i+1));
        lab[i].setBorder(border);
        text[i].setBounds(new Rectangle(100,(i+1)*40, 60, 25));

        pan.add(lab[i],null);
        pan.add(text[i],null);

        setSize(200,330);
        setTitle("Arrays in forums.");

        add(b);
        b.addActionListener((ActionListener) this);
    }        
}

Никогда не используйте пустой макет. Никогда не пытайтесь вызвать в setBounds напрямую. Это никогда не сработает. Ваша кнопка, вероятно, не отображается, потому что находится за пределами поля.

markspace 15.11.2018 19:11

1) Для более быстрой помощи опубликуйте минимальный воспроизводимый пример или Краткий, автономный, правильный пример. 2) Предоставьте изображение ASCII или простой рисунок макета предназначена графического интерфейса пользователя с минимальным размером и, если размер можно изменять, с большей шириной и высотой, чтобы показать, как следует использовать дополнительное пространство. 3) Графические интерфейсы Java должны работать с разными ОС, размером экрана, разрешением экрана и т. д., Используя разные PLAF в разных регионах. Таким образом, они не способствуют созданию идеальной компоновки пикселей. Вместо этого используйте менеджеры компоновки или их комбинации ..

Andrew Thompson 16.11.2018 01:39

.. вместе с отступом макета и границами для белое пространство.

Andrew Thompson 16.11.2018 01:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
470
2

Ответы 2

Вы создаете только одну кнопку и добавляете ее в 6 разных мест. Таким образом, вы увидите его только на последнем добавленном месте.

Вы должны добавить кнопку в contentPane, а не в JFrame. Рабочий код для этого, предоставленный SwingDesigner из Eclipse Marketplace, будет:

public class Window extends JFrame {

private JPanel contentPane;

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

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

    JButton btnNewButton = new JButton("New button");
    btnNewButton.setBounds(170, 110, 89, 23);
    contentPane.add(btnNewButton);
}

}

(1-) Не используйте пустой макет. Swing был разработан для использования с менеджерами по расположению. You should add the button to the contentPane, not the JFrame. - можно добавить кнопку в рамку. Метод add () кадра перенаправит компонент на панель содержимого кадра. Нет необходимости специально устанавливать панель содержимого для панели, поскольку панель содержимого по умолчанию уже является JPanel.

camickr 15.11.2018 19:58

Другие вопросы по теме