在此代码中单击新按钮时,Jinternalframe会在按钮后面,即使我添加了其他内容,例如jlabel,jtextfield等,内部框架也会打开所有内容。我尝试了tofront()和movetofront()函数,但它似乎没有用。请帮助,谢谢。
代码:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Messages2 extends JFrame {
JFrame frame;
JButton button1;
public static void main(String[] args) {
Messages2 window = new Messages2();
window.frame.setVisible(true);
}
public Messages2() {
frame = new JFrame();
frame.getContentPane().setBackground(Color.WHITE);
frame.setBounds(100, 100, 220, 220);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//frame.getContentPane().setLayout(new FlowLayout());
JButton btnNew = new JButton("New Message");
btnNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JDesktopPane desktopPane = new JDesktopPane();
JInternalFrame intFrame = new JInternalFrame(
"JInternalFrame demo");
intFrame.setMaximizable(true);
intFrame.setIconifiable(true);
intFrame.setResizable(true);
intFrame.setClosable(true);
intFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
intFrame.setSize(320, 240);
// intFrame.pack();
intFrame.setVisible(true);
desktopPane.add(intFrame);
frame.add(desktopPane, BorderLayout.CENTER);
}
});
btnNew.setBounds(1, 35, 145, 31);
frame.getContentPane().add(btnNew);
}
}
答案 0 :(得分:1)
当点击新按钮时,即使我添加了jlabel,jtextfield等其他内容,Jinternalframe也会在按钮后面,
根据您在上一个问题中发布的代码(在删除之前),您尝试将所有组件直接添加到框架中。 Swing以与添加组件相反的顺序绘制组件。因此,由于最后添加了内部框架,因此首先进行涂装,然后将所有其他部件涂在其上面。
这不是你应该使用JInternalFrame的方式。您需要将JDesktopPane / JInternalFrames与其他组件分开,并分别使用它们。
阅读How to Use Internal Frames上Swing教程中的部分,了解基本信息和示例。
必须将面板和桌面窗格添加到框架的不同区域。例如:
frame.add(panel, BorderLayout.NORTH);
frame.add(desktopPane, BorderLayout.CENTER);
答案 1 :(得分:0)
您未正确使用JInternalFrame。它应该只放在JDesktopPane中,你不会做的事情,我建议你开始做。请查看appropriate tutorial on this。
您的按钮和JInternalFrame现在填满了该字段,因为您正在使用JFrame的默认BorderLayout。建议: