JFrame中只显示一个组件 [英] Only one component shows up in JFrame
问题描述
作为我加密项目的改进,我决定制作一个小GUI。但是,当我运行程序时,只有顶部元素出现在屏幕上,它似乎模糊了其他元素,尽管我无法检查。有谁知道为什么?
除了 e()
和 d()
因为那些只是加密一个字符串而与GUI无关。我还希望能够在不编辑加密的情况下尽可能加快速度,以使其尽可能好。
As an improvement to my encryption project I decided to make a little GUI. However, when I run the program, only the top element shows up on the screen and it appears to obscure the others, though I have no way of checking. Does anyone know why?
Below is my code in its entirety besides e()
and d()
because those simply encrypt a string and have nothing to do with a GUI. I would also like a way to speed it up as much as possible without editing the encryption, just to make it as great as possbile.
@SuppressWarnings("serial")
public class EncDecExample extends JFrame implements ActionListener {
final static JPanel top = new JPanel();
final static JPanel mid = new JPanel();
final static JPanel bot = new JPanel();
final static JTextField in = new JTextField(10);
final static JTextField out = new JTextField(10);
final static JButton enc = new JButton("Encrypt");
final static JButton dec = new JButton("Decrypt");
final static JFrame f = new JFrame("Encryption/decryption");
public static void main(String[] args) {
// EncDec.exampleImplement();
f.setSize(500, 500);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
out.setEditable(false);
out.setText("Hello");
in.setVisible(true);
out.setVisible(true);
enc.setVisible(true);
dec.setVisible(true);
top.add(in);
mid.add(enc);
mid.add(dec);
bot.add(out);
f.add(top);
f.add(mid);
f.add(bot);
f.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == enc && !in.getText().equalsIgnoreCase("")) {
out.setText(EncDec.e(in.getText(), 5));
}
else if(e.getSource() == dec && !in.getText().equalsIgnoreCase("")) {
out.setText(EncDec.d(in.getText()));
}
}
}
推荐答案
JFrame
的内容窗格有 BorderLayout
。如果将组件放在没有约束的BL中,它最终会出现在 CENTER
中。该中心只能显示一个组件。
The content pane of a JFrame
has a BorderLayout
. If you place a component in a BL with no constraints it ends up in the CENTER
. The center can only display one component.
立即生效,我建议:
f.add(top, BorderLayout.PAGE_START);
f.add(mid);
f.add(bot, BorderLayout.PAGE_END);
其他积分。
Other points.
- 取出
f.setSize(500,500);
并在<$之前立即拨打pack()
c $ c> setVisible(true) - 要获得更好的结束GUI的方法,请更改
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
到f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-
in。 setVisible(true);
除了框架本身,取出它们。当一个组件被添加到顶级容器并且该容器本身可见时,该组件自动变为可见。 - 更改
公共类EncDecExample扩展JFrame
公共类EncDecExample
此代码保留对框架的引用,这是正确的方法。
- Take out
f.setSize(500, 500);
and callpack()
immediately beforesetVisible(true)
- For a better way to end the GUI, change
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tof.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
in.setVisible(true);
Except for the frame itself, take these out. A component automatically becomes visible when it is added to a top level container and that container is itself made visible.- Change
public class EncDecExample extends JFrame
topublic class EncDecExample
This code keeps a reference to a frame, and that is the right way to go.
这篇关于JFrame中只显示一个组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!