【发布时间】:2012-05-11 10:01:04
【问题描述】:
我的JLayeredPane 有问题,我可能正在做一些非常简单的事情,但我无法理解它。我遇到的问题是所有组件都合并在一起并且没有顺序。你能否纠正这个问题,因为我不知道。我想做的顺序是这样的布局
输出
label1(后面)
输入(在前面)
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class window extends JFrame implements KeyListener {
/**
*
*/
private static final long serialVersionUID = 7092006413113558324L;
private static int NewSize;
public static String MainInput;
public static JLabel label1 = new JLabel();
public static JTextField input = new JTextField(10);
public static JTextArea output = new JTextArea(main.Winx, NewSize);
public window() {
super("Satine. /InDev-01/");
JLabel label1;
NewSize = main.Winy - 20;
setLayout(new BorderLayout());
output.setToolTipText("");
add(input, BorderLayout.PAGE_END);
add(output, BorderLayout.CENTER);
input.addKeyListener(this);
input.requestFocus();
ImageIcon icon = new ImageIcon("C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\.Satine\\img\\textbox.png", "This is the desc");
label1 = new JLabel(icon);
add(label1, BorderLayout.PAGE_END);
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
try {
MainMenu.start();
} catch (IOException e1) {
System.out.print(e1.getCause());
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
还有主类。
import java.awt.Container;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
public class main {
public static int Winx, Winy;
private static JLayeredPane lpane = new JLayeredPane();
public static void main(String[] args) throws IOException{
Winx = window.WIDTH;
Winy = window.HEIGHT;
window Mth= new window();
Mth.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Mth.setSize(1280,720);
Mth.setVisible(true);
lpane.add(window.label1);
lpane.add(window.input);
lpane.add(window.output);
lpane.setLayer(window.label1, 2, -1);
lpane.setLayer(window.input, 1, 0);
lpane.setLayer(window.output, 3, 0);
Mth.pack();
}
}
感谢您抽出宝贵时间,我不希望为我编写代码,我想要的只是提示我哪里出错了。
【问题讨论】:
-
为什么不直接使用 GUI 底部的 JLayeredPane,在需要覆盖的部分?另外,为什么您似乎两次向 JLayeredPane 添加组件?我从来没有使用过
setLayer(...)方法,我不确定你为什么会这样。为什么不简单地调用add(Component, Integer)重载? -
我明白你的意思,但我将如何拆分它?
-
?你的意思是你会如何分割它?您可以为整个 GUI 使用不同的布局,例如 BoxLayout,将输出添加到顶部并将 JLayeredPane 添加到底部,然后将组件添加到 JLayeredPane 一次,而不是您看起来的两次。
-
布局的关键是试验、玩耍、使用它们,直到它们按照您的意愿工作。
-
ImageIcon icon = new ImageIcon("C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\.Satine\\img\\textbox.png", "This is the desc");1)"C:\\Users\\" + System.getProperty("user.name")可能等同于System.getProperty("user.home")但是.. 2) 如果这是一个“应用程序资源”,它通常位于应用程序,可通过从Class.getResource(String)获取的 URL 访问
标签: java swing jlayeredpane