1
JScrollPane
の中にJDesktopPane
があります。 JDesktopPane
の中には、プログラムで追加されたJInternalFrame
が多数あります。JScrollPane内のJDesktopPaneサイズ変更の問題
JDesktopPane
が固定サイズ(主JFrameのサイズよりはるかに大きい)JScrollPane
サイズを有するべきである:私はこの問題を持っていると思い
イメージのエディタ(Photoshopなど)と基本的に同じ動作ですが、イメージの代わりにビューポートにJInternalFrame
が表示されます。
私はこの動作が簡単になると思っていましたが、それを正しく行うことはできません。確かに私は...
をレイアウトや何か関連についての何かが欠けています。ここの関連SSCCEだ
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Rectangle;
class Main extends JFrame {
JDesktopPane container = new JDesktopPane();
// New frame with 2 JInternalFrames inside a JDesktopPane inside a JScrollPane
Main(){
super("JDesktopPane SS");
setSize(1280, 720);
setLayout(new ScrollPaneLayout());
container.setBounds(new Rectangle(1920, 1080));
JScrollPane scrollContainer = new JScrollPane(container, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
setContentPane(scrollContainer);
container.add(createFrame());
container.add(createFrame());
}
public static void main(String[] args){
SwingUtilities.invokeLater(() -> {
// Create new frame with 2 JInternalFrames inside a JDesktopPane inside a JScrollPane
JFrame main_frame = new Main();
main_frame.setVisible(true);
});
}
// Create new InternalFrame with a TextPane
private JInternalFrame createFrame(){
JInternalFrame new_frame = new JInternalFrame("Document");
new_frame.setResizable(true);
JTextPane txt = new JTextPane();
txt.setPreferredSize(new Dimension(100, 80));
new_frame.add(txt);
new_frame.pack();
new_frame.setVisible(true);
return new_frame;
}
}
ありがとうございます、今はうまくいきます!しかし、その方法を使うべきではないでしょうか? – Ararararagi
@Ararararagi:どのメソッド、 'setPreferredSize(...)'?おそらく。純粋な人は、JDesktopPaneまたはビューポートで 'getPreferredSize()'をオーバーライドする必要があります。しかし、 'setSize(...)'や 'setBounds(...) 'を呼び出すことはあまり推奨されないことを理解してください。 –
@Ararararagi:ビューポートがどのように動作するのか、そしてそれが含まれているコンポーネントのサイズを決めるために使用するものを理解することが、最も重要なことです。 –