NetBeans GUI エディターでの埋め込みキャンバスのサイズ変更の問題
JScrollPane 内に Canvas を先頭に含む JSplitPane を使用してアプリケーションを構築する場合コンポーネントを使用すると、サイズ変更の問題が発生する可能性があります。仕切りを上に押すと、仕切りが Canvas の下に隠れてしまう傾向があります。
JScrollPane と Canvas の優先サイズ、最小サイズ、最大サイズをさまざまに調整しても、この問題の解決には効果がないことがわかっています。ここでは、NetBeans によって生成された関連コードを詳しく見ていきます。
jSplitPane1 = new javax.swing.JSplitPane(); jScrollPane1 = new javax.swing.JScrollPane(); canvas1 = new java.awt.Canvas(); jTextField1 = new javax.swing.JTextField(); jSplitPane1.setDividerLocation(300); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jScrollPane1.setViewportView(canvas1); jSplitPane1.setTopComponent(jScrollPane1); jTextField1.setText("jTextField1"); jSplitPane1.setRightComponent(jTextField1);
原因は、Canvas コンポーネントの setPreferredSize() の使用にあります。固定サイズを設定すると、Canvas の柔軟性がなくなり、周囲の JScrollPane のサイズ変更機能が制限されます。
この問題の解決策は、固定サイズを削除し、Canvas が動的に優先サイズを計算できるようにすることです。これは、動的なサイズ変更に対応するために、囲んでいるウィンドウで Pack() を使用することで実現できます。
サイズ変更の問題を解決する例を次に示します。
import draw.GraphPanel; import java.awt.EventQueue; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; /** * @see https://stackoverflow.com/q/11942961/230513 */ public class SplitGraph extends JPanel { public SplitGraph() { super(new GridLayout()); JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); GraphPanel graphPanel = new GraphPanel(); split.setTopComponent(new JScrollPane(graphPanel)); split.setBottomComponent(graphPanel.getControlPanel()); this.add(split); } private void display() { JFrame f = new JFrame("SplitGraph"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new SplitGraph().display(); } }); } }
この例では、推奨されるGraphPanel のサイズは動的に計算され、ディバイダが移動されると適切に調整されます。これにより、分割線が消える問題を発生させることなく、シームレスなサイズ変更エクスペリエンスが可能になります。
以上がNetBeans の JSplitPane の埋め込みキャンバスがサイズ変更時に消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。