Hallo,
Ich hoffe, dass sich diese Thema nicht wiederholt. Ich habe bisschen gesucht im internet nach einer möglicher Lösung für mein Problem und da habe ich leider nichts gefunden..
Ich habe folgendes Problem:
Ich habe eine swing Applikation die in sich ein JPanel enthält. Dieser Panel enthält ein JMenu in und noch ein JPanel wo die ganze Komponenten platziert sind. Der letzte Panel enthält in sich eine Tabelle in einem ScrollPane und gleich unten (vertikale Anordnung) ein Bild in einem zweitem ScrollPane, alles zusammen in einem vertikalem SplitPane.
Meine Komponenten (ScrollPane mit Tabelle und ScrollPane mit dem Bild) haben keine Grösse fix gesetezt. Die Applikation starte ich normal, indem ich den Kontruktor von der JFrame Klasse aufrufe und dieser wiederum den anderen Panel mit Komponenten erzeugt. Damit ich eine maximale Fenstergrösse erreiche, setze ich noch window.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH); vor dem window.setVisible(true)
Das Fenster wird maximiert, nur die Tabelle ist extrem lang, ich vermute deswegen weil meine Bild in dem anderem Scrollpane auch serh gross ist, eigentlich viel grösser als die eigentliche Fenstergrösse.
Ich weiss, dass ich mit setSize() oder setPreferedSize() die Grösse von Komponenten explizit setzen kann, nur wie kann ich wissen wie gross mein Fenster eigentlich ist wo die Komponenten platziert werden bevor es noch sichtbar wird, befor ich also setVisible(true) setze?? Mein Problem ist also, dass die Grösse von meinen Komponenten von der Grösse des Fensters abhängt und die Grösse muss dann schon gesetzet werden beim Erzeugen von diesem Komponenten befor das alles noch sichtbar wird.
Ich stecke mit dem Problems eit paar Tage, wenn mir jemand damit helfen kann, wäre sehr hilfreich!
Hier ein kurzer ausschnitt aus meinem code:
//==========================
//========================
lg
Sejla
Ich hoffe, dass sich diese Thema nicht wiederholt. Ich habe bisschen gesucht im internet nach einer möglicher Lösung für mein Problem und da habe ich leider nichts gefunden..
Ich habe folgendes Problem:
Ich habe eine swing Applikation die in sich ein JPanel enthält. Dieser Panel enthält ein JMenu in und noch ein JPanel wo die ganze Komponenten platziert sind. Der letzte Panel enthält in sich eine Tabelle in einem ScrollPane und gleich unten (vertikale Anordnung) ein Bild in einem zweitem ScrollPane, alles zusammen in einem vertikalem SplitPane.
Meine Komponenten (ScrollPane mit Tabelle und ScrollPane mit dem Bild) haben keine Grösse fix gesetezt. Die Applikation starte ich normal, indem ich den Kontruktor von der JFrame Klasse aufrufe und dieser wiederum den anderen Panel mit Komponenten erzeugt. Damit ich eine maximale Fenstergrösse erreiche, setze ich noch window.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH); vor dem window.setVisible(true)
Das Fenster wird maximiert, nur die Tabelle ist extrem lang, ich vermute deswegen weil meine Bild in dem anderem Scrollpane auch serh gross ist, eigentlich viel grösser als die eigentliche Fenstergrösse.
Ich weiss, dass ich mit setSize() oder setPreferedSize() die Grösse von Komponenten explizit setzen kann, nur wie kann ich wissen wie gross mein Fenster eigentlich ist wo die Komponenten platziert werden bevor es noch sichtbar wird, befor ich also setVisible(true) setze?? Mein Problem ist also, dass die Grösse von meinen Komponenten von der Grösse des Fensters abhängt und die Grösse muss dann schon gesetzet werden beim Erzeugen von diesem Komponenten befor das alles noch sichtbar wird.
Ich stecke mit dem Problems eit paar Tage, wenn mir jemand damit helfen kann, wäre sehr hilfreich!
Hier ein kurzer ausschnitt aus meinem code:
Java:
/**
Die JFrame Klasse, die den Panel enthält
**/
public class MainView extends JFrame {
Container content = getContentPane();
private static MainView mainView = null;
private WorkingView workingView;
private MainView() {
content.setLayout(new BorderLayout(0, 0));
}
public void initWorkingView() {
workingView = new WorkingView(this);
content.add(workingView, BorderLayout.CENTER);
}
public synchronized static MainView getInstance() {
if (mainView == null) {
mainView = new MainView();
}
return mainView;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MainView view = MainView.getInstance();
view.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
view.initWorkingView();
view.setVisible(true);
}
});
}
//==========================
Java:
/**
1.Panel, der einen anderen Panel enthält
**/
public class WorkingView extends JPanel {
private MainView parent;
private JMenuBar mainMenu = new JMenuBar();
public WorkingView(MainView parent) {
this.parent = parent;
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
// setSize(new Dimension(parent.getContentPane().getSize()));
System.out.println("panel size: " + parent.getContentPane().getSize());
createMenu();
LocalisationWindow localWindow = new LocalisationWindow(this);
// setPreferredSize(parent.getSize());
// setSize(parent.getSize());
add(localWindow);
}
private void createMenu() {
parent.setJMenuBar(mainMenu);
}
}
Java:
/**
Panel mit ScrollPanes
**/
public class LocalisationWindow extends JPanel {
private WorkingView parent;
private JScrollPane scrollPane;
private JScrollPane tableScrollPane;
private JTable table;
private JSplitPane vertSplitPane;
private DisplayedImage displayedImage; // ein JLabel mit dem Bild als Hintergrund
private GpsPosition gpsPosition;
Object[] headers = {"PTO", "MAC", "Status", "Batterie"};
Object[][] data = {
{"PTO 1", "A1256D16", "ONLINE", "Low"},
{"PTO 2", "6725E875", "OFFLINE", "Ok"},
{"PTO 3", "A1256D16", "ONLINE", "Ok"}
};
public LocalisationWindow(WorkingView parent) {
this.parent = parent;
/*
// set window size to the size of screen
setSize(getMaximumScreenSize());
*/
// creates components and put them to the window
initLocalisationWindow();
}
public Dimension getMaximumScreenSize() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dimension = toolkit.getScreenSize();
return dimension;
}
public void initLocalisationWindow() {
createContent();
}
private void createContent() {
// create table
createTable();
// create tableScrollPane
tableScrollPane = new JScrollPane(table);
// tableScrollPane.setSize(new Dimension(parent.getParent().getContentPane().getSize().width, 150) );
// tableScrollPane.setPreferredSize(new Dimension(parent.getParent().getContentPane().getSize().width, 150) );
tableScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
tableScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
displayedImage = imageLoaderThread.getMapGenerator().getOutdoorImage();
displayedImage.setOpaque(true);
scrollPane = new JScrollPane(displayedImage);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
// scrollPane.setSize(new Dimension(parent.getParent().getContentPane().getSize().width,
//parent.getParent().getContentPane().getSize().height - 150) );
// scrollPane.setPreferredSize(new Dimension(parent.getParent().getContentPane().getSize().width,
//parent.getParent().getContentPane().getSize().height - 150) );
// create vertical split pane
vertSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tableScrollPane, scrollPane);
vertSplitPane.setOneTouchExpandable(true);
vertSplitPane.setDividerLocation(150);
vertSplitPane.setDividerSize(20);
add(vertSplitPane, BorderLayout.CENTER);
}
}
Sejla
Zuletzt bearbeitet von einem Moderator: