JFrame с нулевым макетом ничего не отображает

Мой JFrame с макетом null ничего не отображает... Я попытался добавить компоненты в JPanel, а затем установить его в качестве панели содержимого фрейма. Совсем недавно (как видно из кода ниже) я попытался добавить прямо в фрейм. Я использую Java 8.

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

public class Electog extends JFrame implements MouseListener,      MouseMotionListener {
     BlankArea blankArea;
     JTextArea textArea;
static JFrame frame;

public static void main(String[] args) {
    JFrame frame = new Electog();
    frame.setTitle("Electog"); 
    frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
    frame.setVisible(true);
}

public Electog() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(null);

    JRadioButton selectButton = new JRadioButton("Select");
    selectButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    selectButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });
    selectButton.setSelected(true);

    JRadioButton removeButton = new JRadioButton("Remove");
    removeButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    removeButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton openButton = new JRadioButton("Open");
    openButton.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    openButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });


    JRadioButton saveButton = new JRadioButton("Save");
    saveButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    saveButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton wireButton = new JRadioButton("Wiring");
    wireButton.setMnemonic(KeyEvent.VK_W);
    wireButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    wireButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton subcircuitButton = new JRadioButton("Subcircuit");
    subcircuitButton.setMnemonic(KeyEvent.VK_C);
    subcircuitButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    subcircuitButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton ANDButton = new JRadioButton("AND Gate");
    ANDButton.setMnemonic(KeyEvent.VK_A);
    ANDButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    ANDButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton NANDButton = new JRadioButton("NAND Gate");
    NANDButton.setMnemonic(KeyEvent.VK_N);
    NANDButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    NANDButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton ORButton = new JRadioButton("OR Gate");
    ORButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    ORButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton groundButton = new JRadioButton("Ground");
    groundButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    groundButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    JRadioButton powerButton = new JRadioButton("Power");
    powerButton.addKeyListener(new KeyListener() {
        @Override
        public void keyReleased(KeyEvent e) {
            handleAction(e);
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override 
        public void keyPressed(KeyEvent e) {
            handleAction(e);
        }
    });
    powerButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            handleAction(e);
        }

        public void actionEvent(ActionEvent e) {
            handleAction(e);
        }
    });

    ButtonGroup group = new ButtonGroup();
    group.add(selectButton);
    group.add(removeButton);
    group.add(openButton);
    group.add(saveButton);
    group.add(wireButton);
    group.add(subcircuitButton);
    group.add(ANDButton);
    group.add(NANDButton);
    group.add(ORButton);
    group.add(groundButton);
    group.add(powerButton);

    //menu buttons, still need more features and zoom/move simulation screen
    add(selectButton);
    add(removeButton);
    add(openButton);
    add(saveButton);
    add(wireButton);
    add(subcircuitButton);
    add(ANDButton);
    add(NANDButton);
    add(ORButton);
    add(groundButton);
    add(powerButton);

    selectButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, 0, 0); //11 is number of buttons as far as now
    removeButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 0);
    openButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (2.0/11.0)), 0);
    saveButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (3.0/11.0)), 0);
    wireButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (4.0/11.0)), 0);
    subcircuitButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (5.0/11.0)), 0);
    ANDButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1/11)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (6.0/11.0)), 0);
    NANDButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (7.0/11.0)), 0);
    ORButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (8.0/11.0)), 0);
    groundButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (9.0/11.0)), 0);
    powerButton.setBounds((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1.0/11.0)), 50, (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (10.0/11.0)), 0);

    //subcircuit buttons
    JScrollPane ScrollPane = new JScrollPane();
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(null);
    buttonPanel.setSize(new Dimension((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1/5)), (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 50)));
    ScrollPane.setViewportView(buttonPanel);
    add(ScrollPane);
    ScrollPane.setBounds((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1/5)), (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 50), 0, 50);
    ScrollPane.updateUI();
    blankArea = new BlankArea(Color.WHITE);
    add(blankArea);
    blankArea.addMouseListener(this);
    blankArea.addMouseMotionListener(this);
    blankArea.setBounds((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (4/5)), (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 50), (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (1/5)), 50);
    addMouseListener(this);
    addMouseMotionListener(this);
    setPreferredSize(new Dimension((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() * (4/5)),(int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 50)));
}
public void handleAction(KeyEvent e) {
    if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0 && (e.getKeyChar() == 'S' || e.getKeyChar() == 's')) {
        try {
            //saveCurrentFile();
        } catch(Exception ex) {
            JOptionPane.showMessageDialog(frame, ex.getStackTrace());
        }
    } else if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0 && (e.getKeyChar() == 'O' || e.getKeyChar() == 'o')) {
        try {
            //openFile();
        } catch(Exception ex) {
            JOptionPane.showMessageDialog(frame, ex.getStackTrace());
        }
    } else if ((e.getModifiers() & KeyEvent.CTRL_MASK) == 0 && (e.getKeyChar() == 'A' || e.getKeyChar() == 'a')) {
        //selectAll();
    } else if ((e.getModifiers() & KeyEvent.CTRL_MASK) == 0 && (e.getKeyChar() == 'A' || e.getKeyChar() == 'a')) {  

    } else if ((e.getModifiers() & KeyEvent.CTRL_MASK) == 0 && (e.getKeyChar() == 'N' || e.getKeyChar() == 'n')) {  

    } else if ((e.getModifiers() & KeyEvent.CTRL_MASK) == 0 && (e.getKeyChar() == 'O' || e.getKeyChar() == 'o')) {  

    }

}

public void handleAction(ActionEvent e) {
    if (e.getActionCommand() == "Save") {
        try {
            //saveCurrentFile();
        } catch(Exception ex) {
            JOptionPane.showMessageDialog(frame, ex.getStackTrace());
        }
    } else if (e.getActionCommand() == "Open") {
        try {
            //openFile();
        } catch(Exception ex) {
            JOptionPane.showMessageDialog(frame, ex.getStackTrace());
        }
    } else if (e.getActionCommand() == "AND Gate") {    

    } else if (e.getActionCommand() == "NAND Gate") {   

    } else if (e.getActionCommand() == "OR Gate") { 

    } else if (e.getActionCommand() == "Select") {  

    } else if (e.getActionCommand() == "Ground") {  

    } else if (e.getActionCommand() == "Power") {   

    } else if (e.getActionCommand() == "Remove") {  

    } else if (e.getActionCommand() == "Subcircuit") {  

    } else if (e.getActionCommand() == "Wiring") {  

    }
}

public void mousePressed(MouseEvent e) {

}

public void mouseReleased(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mouseClicked(MouseEvent e) {

}

public void mouseMoved(MouseEvent e) {

}

public void mouseDragged(MouseEvent e) {

}
}

person Electog    schedule 17.09.2015    source источник
comment
Шаг 1: НЕ используйте нулевой макет.   -  person gla3dr    schedule 17.09.2015
comment
Вы устанавливаете высоту для каждой кнопки на 0 и ширину области прокрутки, а также selectButton на 0.   -  person Lukas Rotter    schedule 17.09.2015
comment
возможный дубликат Использование JPanel с нулевым макетом   -  person Eric Leibenguth    schedule 17.09.2015
comment
Спасибо LuxxMiner... это сработало, не понял, что это x, y, ширина, высота (думал, что это ширина, высота, x, y)   -  person Electog    schedule 17.09.2015
comment
Я согласен с @gla3dr, что вы обманываете себя, думая, что макет null — это самый простой способ создания сложных графических интерфейсов. Однако проблема с ними заключается в том, что их использование приводит к жесткому графическому интерфейсу, который очень сложно улучшить или отладить, графическому интерфейсу, который плохо выглядит на большинстве платформ, кроме, может быть, одной. Лучшее долгосрочное решение состоит в том, чтобы изучить и использовать менеджеры компоновки, научившись вкладывать панели JPanel, каждая из которых использует свои собственные менеджеры компоновки.   -  person Hovercraft Full Of Eels    schedule 17.09.2015
comment
Я не думаю, что это самое простое... Я думаю, что это самое простое на данный момент. BlankArea (который расширяет JPanel) и ScrollPane по-прежнему не отображаются. Я исправил переключатель (x, y), (ширина, высота)   -  person Electog    schedule 17.09.2015
comment
@Electog Я действительно не думаю, что куча координат проще (для понимания), чем макеты (тоже, конечно, не лучше) ... Не могли бы вы опубликовать изображение предполагаемого вида (в качестве редактирования), чтобы мы могли дать вам предложения на каких менеджерах компоновки вы могли бы использовать?   -  person Lukas Rotter    schedule 17.09.2015
comment
"I think its simplest for now" -- но это задержит ваше обучение использованию менеджеров компоновки, чего делать не следует. Будьте смелыми — сделайте решительный шаг — изучите макеты.   -  person Hovercraft Full Of Eels    schedule 17.09.2015
comment
Вы будете просто критиковать меня или поможете мне с моим нулевым макетом?   -  person Electog    schedule 18.09.2015
comment
Будете ли вы просто критиковать меня Люди критикуют не вас, а подход к коду. Не путайте себя со своим кодом. или вы поможете мне с моим нулевым макетом? Если под словом "помощь" вы имеете в виду решение, которое не приведет к еще 3-4 'теперь, как мне исправить.. .?' вопросы стиля, да. Но для этого мы будем использовать макеты, а вы, кажется, отказываетесь даже предоставить нам достаточно информации, чтобы помочь вам в этом.   -  person Andrew Thompson    schedule 18.09.2015


Ответы (1)


У каждого java.​awt.​Component есть метод setBounds(int x, int y, int width, int height), используемый для определения его местоположения в контейнере. Он работает только с контейнером с нулевым макетом.

person anas    schedule 19.10.2015