Hallo, ich dreh absolut am Rad, ich hab ein Layout Problem.... Wahrscheinlich kann man es irgendwie loesen aber ich weis nicht wo ich da anfangen soll. Zur veranschaulichung hab ich versucht einen kleinen Frame mit zwei Panels zu schreiben, die einige Elemente beinhalten (aehnlich wie in meinem Projekt).
So das ganze begann als ich mit setPreferredSize versuchen wollte meine Buttons alle gleich gross zu machen. Dies gelang jedoch nicht, weil wohl wahrscheinlich das Layout sie immer zwanghaft schrumpfte. als ich in den Panels das Layout soweit hatte, dass dies nicht mehr passiert bekam ich nun das Problem das die Groesse des Frames zu gering war, weil sich nun alles auszudehenen schien. Ich komm mir schon vor wie bei Alice im Wunderland - es ist alles immer ewig zu klein, unpassend oder zu gigantisch.
Endlich hatte ich ein Panel das passte und auch ein andres (sh Bsp). Ein kleines und ein grosses. Gebe ich beide zusammen in einem Frame geht die Kacke wieder los (ich will die gleiche Breite aber die unterschiedliche Hoehe ist durchaus erwuenscht!!! Beide fuer sich alleine passen. Ich weiss, dass sich das Gridlayout immer wohl am Groessten Bestandteil orientiert, ein Flowlayout, haengt das alles immer nur rechts an, ich will es ja untereinander. Allerdings kenne ich mich im Dschungel der Layouts bei Java viel zu wenig aus - bitte helft mir eine normale Groesse zu finden.
Fragen:
Wie bekomme ich es hin bei dem Programm oben ein kleines und unten ein grosses Panel mit der Breite des unteren zu erzeugen?
Wie kann ich etwa die 6 Radiobuttons etwas naeher zusammenruecken - das sieht so nach dekadenter Platzverschwendung aus?
So das ganze begann als ich mit setPreferredSize versuchen wollte meine Buttons alle gleich gross zu machen. Dies gelang jedoch nicht, weil wohl wahrscheinlich das Layout sie immer zwanghaft schrumpfte. als ich in den Panels das Layout soweit hatte, dass dies nicht mehr passiert bekam ich nun das Problem das die Groesse des Frames zu gering war, weil sich nun alles auszudehenen schien. Ich komm mir schon vor wie bei Alice im Wunderland - es ist alles immer ewig zu klein, unpassend oder zu gigantisch.
Endlich hatte ich ein Panel das passte und auch ein andres (sh Bsp). Ein kleines und ein grosses. Gebe ich beide zusammen in einem Frame geht die Kacke wieder los (ich will die gleiche Breite aber die unterschiedliche Hoehe ist durchaus erwuenscht!!! Beide fuer sich alleine passen. Ich weiss, dass sich das Gridlayout immer wohl am Groessten Bestandteil orientiert, ein Flowlayout, haengt das alles immer nur rechts an, ich will es ja untereinander. Allerdings kenne ich mich im Dschungel der Layouts bei Java viel zu wenig aus - bitte helft mir eine normale Groesse zu finden.
Fragen:
Wie bekomme ich es hin bei dem Programm oben ein kleines und unten ein grosses Panel mit der Breite des unteren zu erzeugen?
Wie kann ich etwa die 6 Radiobuttons etwas naeher zusammenruecken - das sieht so nach dekadenter Platzverschwendung aus?
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class SeparatorPanel extends JPanel{
public SeparatorPanel(){
JFrame frame = new JFrame("blablabla");
frame.setLayout(new GridLayout(2, 0));
frame.add(drawSmallPanel());
frame.add(drawBigPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocation(300,100);
frame.setVisible(true);
frame.pack();
}
private JPanel drawBigPanel(){
// panel
this.setLayout(new BorderLayout()); //GridLayout(2,2));
this.setBorder(BorderFactory.createRaisedBevelBorder());
// label
JPanel jpOptions = new JPanel(new GridLayout(4,2));
JLabel labelSeparator = new JLabel("blabla");
jpOptions.add(labelSeparator);
JButton butSeparator = new JButton("blablabla");
butSeparator.setPreferredSize(new Dimension( 200, 40));
jpOptions.add(butSeparator);
// radiobuttons
// jpSeparatorOptions::jpRow
JRadioButton[] rbSeparatorOptions = new JRadioButton[6];
ButtonGroup rbGroup = new ButtonGroup();
for(int cnt=0;cnt<6;cnt++){
JPanel jpRow = new JPanel(new FlowLayout(FlowLayout.LEFT));
final int iSelectedIndex = cnt;
rbSeparatorOptions[cnt] = new JRadioButton("blabla");
rbGroup.add(rbSeparatorOptions[cnt]);
// action listener
// set 5. separator as selected
if(cnt == 4){
rbSeparatorOptions[cnt].setSelected(true);
}
jpRow.add( rbSeparatorOptions[cnt]);
jpOptions.add(jpRow);
}
this.add(jpOptions, BorderLayout.NORTH);
// table
JPanel jpPreview = new JPanel(new FlowLayout());
TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() { return 10; }
public int getRowCount() { return 5;}
public Object getValueAt(int row, int col) { return new Integer(row*col); }
};
JTable table = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(table);
table.getTableHeader().setReorderingAllowed( false );
table.setBackground(jpPreview.getBackground());
table.setPreferredScrollableViewportSize(new Dimension(500, 80));
table.setBorder(BorderFactory.createRaisedBevelBorder());
table.setOpaque(true);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
jpPreview.add(scrollPane);
this.add(jpPreview, BorderLayout.SOUTH);
return this;
}
private JPanel drawSmallPanel(){
JPanel smallPanel = new JPanel();
// panel : jpLoadPath
smallPanel.setLayout(new GridLayout(2, 1));
smallPanel.setBorder(BorderFactory.createRaisedBevelBorder());
// label : jpLoadPath::jpLoadLabel
JPanel jpLoadLabel = new JPanel( new GridLayout(1,2));
JLabel labelLoad = new JLabel("blablabla");
jpLoadLabel.add(labelLoad);
// button : jpLoadPath::jpLoadLabel
JButton butLoadPath = new JButton("blabla");
butLoadPath.setPreferredSize(new Dimension( 200, 40));
jpLoadLabel.add(butLoadPath);
smallPanel.add(jpLoadLabel);
//this.add(butLoadPath);
// label : jpLoadPath
JLabel labelLoadPath = new JLabel("bla/bla/bla");
smallPanel.add(labelLoadPath, BorderLayout.SOUTH);
return smallPanel;
}
/////////////////////////////////////////////////////////////
public static void main(String[] args){
SeparatorPanel Sepp = new SeparatorPanel();
}
}