Есть ли способ заставить внутренний фрейм работать как панель в JFrame?
Я не совсем понимаю, что вы имеете в виду под панелью, но, наверное, как JPanel
? Конечно, можете, но почему, это мой вопрос, если вам не нужна какая-то быстрая плавающая панель, но чем вы говорите, что не хотите, чтобы она перетаскивалась? Так что я немного не уверен в ваших мотивах, и мне надоело отвечать ...
Проблема в том, что там есть заголовок Internalframe.
Ну вот код для удаления titlepane (нашел его здесь):
//remove title pane http://www.coderanch.com/t/505683/GUI/java/JInternalframe-decoration
BasicInternalFrameTitlePane titlePane =(BasicInternalFrameTitlePane)((BasicInternalFrameUI)jInternalFrame.getUI()).getNorthPane();
jInternalFrame.remove(titlePane);
и пользователь может перетаскивать его.
И я обнаружил, что это делает JInternalFrame
неподвижным, удаляя MouseListener
, которые делают его подвижным, но важно отметить, что нет необходимости удалять MouseListener
, поскольку метод, используемый для его нераспаковываемого, удалит NorthPane
, который MouseListener
тоже добавлен, поэтому нам не нужно удалять его самим:
//remove the listeners from UI which make the frame move
BasicInternalFrameUI basicInternalFrameUI = ((javax.swing.plaf.basic.BasicInternalFrameUI) jInternalFrame.getUI());
for (MouseListener listener : basicInternalFrameUI.getNorthPane().getMouseListeners()) {
basicInternalFrameUI.getNorthPane().removeMouseListener(listener);
}
И согласно вашему заголовку:
как заставить JInternalFrame
заполнить Контейнер
Просто вызовите setSize(int width,int height)
на JInternalFrame
с параметрами JDesktopPane
s width
и height
(размер JDesktopPane
будет изменен путем переопределения getPreferredSize()
).
Что даст нам это:
import java.awt.Dimension;
import java.awt.HeadlessException;
import java.awt.event.MouseListener;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;
/**
*
* @author David
*/
public class Test {
public Test() {
createAndShowGUI();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
private void createAndShowGUI() throws HeadlessException {
JFrame frame = new JFrame();
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final JDesktopPane jdp = new JDesktopPane() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
};
frame.setContentPane(jdp);
frame.pack();
createAndAddInternalFrame(jdp);
frame.setVisible(true);
}
private void createAndAddInternalFrame(final JDesktopPane jdp) {
JInternalFrame jInternalFrame = new JInternalFrame("Test", false, false, false, false);
jInternalFrame.setLocation(0, 0);
jInternalFrame.setSize(jdp.getWidth(), jdp.getHeight());
//remove title pane http://www.coderanch.com/t/505683/GUI/java/JInternalframe-decoration
BasicInternalFrameTitlePane titlePane = (BasicInternalFrameTitlePane) ((BasicInternalFrameUI) jInternalFrame.getUI()).getNorthPane();
jInternalFrame.remove(titlePane);
/*
//remove the listeners from UI which make the frame move
BasicInternalFrameUI basicInternalFrameUI = ((javax.swing.plaf.basic.BasicInternalFrameUI) jInternalFrame.getUI());
for (MouseListener listener : basicInternalFrameUI.getNorthPane().getMouseListeners()) {
basicInternalFrameUI.getNorthPane().removeMouseListener(listener);
}
*/
jInternalFrame.setVisible(true);
jdp.add(jInternalFrame);
}
}
person
David Kroukamp
schedule
30.01.2013
JInternalFrame.setUndecorated()
. - person Guillaume Polet   schedule 30.01.2013