Moin, ich habe eine GUI mit geschachtelten JSplitPanes (alles ohne LayoutManager) und möchte nun die einzelnen Komponenten darin beim Programmstart in Abhängigkeit des ParentContainers skalieren. Leider funktioniert setPreferredSize in dem Zusammenhang nicht.
Die Abhängigkeiten hab ich mir folgendermaßen berechnet:
aussehen soll das dann wie folgt:
Hier noch der komplette Code, vllt. kann mir jemand weiterhelfen bzgl. des Verhaltens von JSplitPanes/JScrollPanes. (UnitPanel, MissionPanel, etc sind lediglich von JPanel abgeleitete Klassen und enthalten eine JList)
Danke shconmal...
Die Abhängigkeiten hab ich mir folgendermaßen berechnet:
Java:
int screenX = (int) this.getSize().getWidth();
int screenY = (int) this.getSize().getWidth();
Dimension mapSize = new Dimension((int) (screenX*(2/3)), screenY);
Dimension unitSize = new Dimension((int) (screenX*(1/6)), (int) (screenY*(2/3)));
Dimension missionSize = new Dimension((int) (screenX*(1/6)), (int) (screenY*(2/3)));
Dimension logSize = new Dimension((int) (screenX*(1/3)), (int) (screenY*(1/3)));
aussehen soll das dann wie folgt:
Hier noch der komplette Code, vllt. kann mir jemand weiterhelfen bzgl. des Verhaltens von JSplitPanes/JScrollPanes. (UnitPanel, MissionPanel, etc sind lediglich von JPanel abgeleitete Klassen und enthalten eine JList)
Danke shconmal...
Java:
public class ROCFrame extends javax.swing.JFrame
{
private JSplitPane jSplitPane1;
private JSplitPane jSplitPane2;
private JScrollPane logScroller;
private JScrollPane missionScroller;
private UnitPanel unitPanel;
private MapPanel mapPanel;
private MissionPanel missionPanel;
private LogPanel logPanel;
private JScrollPane unitScroller;
private JSplitPane jSplitPane3;
public ROCFrame() {
super();
initGUI();
}
private void initGUI()
{
int screenX = (int) this.getSize().getWidth();
int screenY = (int) this.getSize().getWidth();
Dimension mapSize = new Dimension((int) (screenX*(2/3)), screenY);
Dimension unitSize = new Dimension((int) (screenX*(1/6)), (int) (screenY*(2/3)));
Dimension missionSize = new Dimension((int) (screenX*(1/6)), (int) (screenY*(2/3)));
Dimension logSize = new Dimension((int) (screenX*(1/3)), (int) (screenY*(1/3)));
try
{
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
jSplitPane1 = new JSplitPane();
getContentPane().add(jSplitPane1, BorderLayout.CENTER);
{
jSplitPane2 = new JSplitPane();
jSplitPane1.add(jSplitPane2, JSplitPane.RIGHT);
jSplitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
// jSplitPane2.setPreferredSize(new java.awt.Dimension(280, 266));
{
jSplitPane3 = new JSplitPane();
jSplitPane3.setResizeWeight(0.5);
jSplitPane2.add(jSplitPane3, JSplitPane.TOP);
{
missionScroller = new JScrollPane();
jSplitPane3.add(missionScroller, JSplitPane.LEFT);
{
missionPanel = new MissionPanel();
missionScroller.setViewportView(missionPanel);
missionPanel.setPreferredSize(missionSize);
}
}
{
unitScroller = new JScrollPane();
jSplitPane3.add(unitScroller, JSplitPane.RIGHT);
{
unitPanel = new UnitPanel();
unitScroller.setViewportView(unitPanel);
unitPanel.setPreferredSize(unitSize);
}
}
}
{
logScroller = new JScrollPane();
jSplitPane2.add(logScroller, JSplitPane.BOTTOM);
{
logPanel = new LogPanel();
logPanel.setPreferredSize(logSize);
logScroller.setViewportView(logPanel);
}
}
}
{
mapPanel = new MapPanel();
mapPanel.setPreferredSize(mapSize);
jSplitPane1.add(mapPanel, JSplitPane.LEFT);
}
}
pack();
setSize(400, 300);
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
ROCFrame inst = new ROCFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
inst.setExtendedState(MAXIMIZED_BOTH);
}
});
}
}