【问题标题】:JFrame with null layout not displaying anything具有空布局的 JFrame 不显示任何内容
【发布时间】:2015-09-17 16:43:52
【问题描述】:

我的JFramenull 布局不会显示任何内容......我尝试将组件添加到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) {

}
}

【问题讨论】:

  • 第 1 步:不要使用空布局。
  • 您将每个按钮的高度设置为 0,将滚动窗格的宽度以及 selectButton 设置为 0。
  • 我同意@gla3dr 的观点,认为null 布局是创建复杂GUI 的最简单方法,这是在自欺欺人。但是,它们的问题是它们的使用导致了很难增强或调试的刚性 GUI,在大多数平台上看起来很糟糕的 GUI,除了可能是一个。更好的长期解决方案是学习和使用布局管理器,学习嵌套 JPanel,每个 JPanel 都使用自己的布局管理器。
  • "I think its simplest for now" -- 但这会延迟你学习使用布局管理器的时间,这是你不应该做的事情。勇敢——冒险——学习布局。
  • “你们会批评我吗?” 人们不是在批评你,只是在代码方法。不要将自己与您的代码混淆。 “或者你会帮我解决我的空布局吗?”如果你所说的“帮助”是指引导你找到一个不会导致多 3-4 个的解决方案 '现在我该如何解决...?' 风格的问题,是的。但要做到这一点,我们会使用布局,您似乎甚至拒绝向我们提供足够的信息来帮助您。

标签: java swing layout-manager null-layout-manager


【解决方案1】:

每个java.​awt.​Component 都有一个setBounds(int x, int y, int width, int height) 方法,用于确定其在其容器中的位置。它仅适用于空布局容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2017-11-07
    相关资源
    最近更新 更多