JSplitPane mit max. Größe

Status
Nicht offen für weitere Antworten.

banshee

Bekanntes Mitglied
hallo,

ganz simples Problem: Ich habe mir eine JSplitPane auf einen JFrame geklebt und möchte, dass sie immer das komplette JFrame ausfüllt. Wie macht ich das am geschicktesten?
 

banshee

Bekanntes Mitglied
ja, danke ist schonmal in etwa das, was ich wollte. Jetzt hab ich nur das Problem, dass der User den divider aus der JSplitPane nicht mehr bewegen kann.
 

banshee

Bekanntes Mitglied
Ich hätte auch gleich noch eine zweite Frage zur richtigen benutzung von TableModels.

Der Gesamtplan sieht folgendermaßen aus: Ich erstelle mir eine JSplitPane, wobei die obere Komponente eine Zeile enhält, über die man ein File auswählen und laden kann, in der unteren Komponente ist ein JTable drin.

Sobald man in der oberen Zeile über einen load-Button also das File einliest, füllt er ein TableModel mit den Daten aus dem File aus. Der Table wird jetzt aber irgendwie nicht aktualisiert, sondern erst, wenn ich das TableModel setze, bevor ich den JTable auf die SplitPane klebe. Da kenne ich aber die Daten noch nicht, weil die ja vom user geladen werden sollen.

Hat jemand eine Idee, wie ich das gut umsetzen kann?
 

banshee

Bekanntes Mitglied
Gut, also hier mal der Code:

Java:
public class App extends JPanel implements ActionListener {
	
	private final JTable table = new JTable();

App() {
		// create SplitPane
		final JSplitPane sp = new JSplitPane();
		sp.setOrientation(JSplitPane.VERTICAL_SPLIT);
		add(BorderLayout.NORTH, sp);
		
		// create bottom component
		sp.setRightComponent(table);
	}

public void actionPerformed(final ActionEvent e) {
		if(e.getSource() == loadBtn) {
						
			try {
				final FileInputStream fis = new FileInputStream(fileField.getText());
				final DataInputStream dis = new DataInputStream(fis);
				final BufferedReader br = new BufferedReader(new InputStreamReader(dis));
												
				final String a = br.readLine();
				final String b[] = a.split("\t");
				final Vector<String[]> data = new Vector<String[]>();
				String strLine;
								
				while((strLine = br.readLine()) != null) {
					data.add(new String(strLine).split(("\t")));
			    }
				
				Object[][] dat = new Object[data.size()][];
				
				for(int i = 0; i < data.size(); i++) {
					dat[i] = data.get(i);
				}
				
				createTable(b, dat);
			} catch(final FileNotFoundException ex) {
			      ex.printStackTrace();
		    } catch(final IOException ex) {
		      ex.printStackTrace();
		    }
		}
	}

private void createTable(final Object[] cols, final Object[][] data) {
		DefaultTableModel mod = new DefaultTableModel(data, cols);
		table.setModel(mod);
		mod.fireTableStructureChanged();
	}

Das ist jetzt natürlich ein klein wenig zusammengewurschtelt und wird auch nochmal überarbeitet, sobald es funktioniert. Das Problem hat es in diesem Forum aber schon öfter gegeben und ich sehe einfach den Unterschied zu den funktionierenden Versionen nicht. Ich habe es auch schon mit fireTableDataChanged() versucht...
 

banshee

Bekanntes Mitglied
Java:
package name;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import java.util.Vector;
import java.io.*;

public class Prak2 extends JPanel implements ActionListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5236358216514693847L;
	private final JButton chooseBtn;
	private final JButton loadBtn;
	private final JTextField fileField;
	private final JFileChooser fc = new JFileChooser();
	private final JTable table = new JTable();
	
	Prak2() {
		// set layout
		final BorderLayout borderLayout = new BorderLayout();
		setLayout(borderLayout);
		
		// create SplitPane
		final JSplitPane sp = new JSplitPane();
		sp.setOrientation(JSplitPane.VERTICAL_SPLIT);
		add(BorderLayout.NORTH, sp);
		
		// create top panel
		final JPanel top = new JPanel();
		final FlowLayout topLayout = new FlowLayout();
		topLayout.setAlignment(FlowLayout.LEFT);
		top.setLayout(topLayout);
		
		// create line for loading a file
		top.add(getJLabel("File"));
		fileField = getJTextField(new Dimension(100, 20));
		top.add(fileField);
		chooseBtn = getJButton("", new Dimension(20, 20));
		top.add(chooseBtn);
		loadBtn = getJButton("Load", new Dimension(75, 20));
		top.add(loadBtn);
		sp.setLeftComponent(top);
		
		// create bottom panel
		sp.setRightComponent(table);
	}
	
	private void createTable(final Object[] cols, final Object[][] data) {
		final DefaultTableModel mod = new DefaultTableModel(data, cols);
		table.setModel(mod);
		mod.fireTableStructureChanged();
	}
	
	public void actionPerformed(final ActionEvent e) {
		if(e.getSource() == chooseBtn) {
			final int retVal = fc.showOpenDialog(this);
			
			if(retVal == JFileChooser.APPROVE_OPTION) {
				fileField.setText(fc.getSelectedFile().getPath());
			} else {
				// cmd cancelled by user
			}
		} else if(e.getSource() == loadBtn) {
						
			try {
				final FileInputStream fis = new FileInputStream(fileField.getText());
				final DataInputStream dis = new DataInputStream(fis);
				final BufferedReader br = new BufferedReader(new InputStreamReader(dis));
												
				final String a = br.readLine();
				final String b[] = a.split("\t");
				final Vector<String[]> data = new Vector<String[]>();
				String strLine;
								
				while((strLine = br.readLine()) != null) {
					data.add(new String(strLine).split(("\t")));
			    }
				
				Object[][] dat = new Object[data.size()][];
				
				for(int i = 0; i < data.size(); i++) {
					dat[i] = data.get(i);
				}
				
				createTable(b, dat);
			} catch(final FileNotFoundException ex) {
			      ex.printStackTrace();
		    } catch(final IOException ex) {
		      ex.printStackTrace();
		    }
		}
	}
	
	/**
	 * creates and returns a handle to a JLabel
	 * @param text: label text
	 * @return: a handle to the label
	 */
	private JLabel getJLabel(final String text) {
		return new JLabel(text);
	}
	
	/**
	 * creates and returns a handle to a JTextField
	 * @param dim: preferred size
	 * @return: a handle to the textfield
	 */
	private JTextField getJTextField(final Dimension dim) {
		final JTextField tf = new JTextField();
		tf.setPreferredSize(dim);
		return tf;
	}
	
	/**
	 * creates and returns a handle to a JButton
	 * @param text: button text
	 * @param dim: preferred size
	 * @return: a handle to the button
	 */
	private JButton getJButton(final String text, final Dimension dim) {
		final JButton btn = new JButton(text);
		btn.setPreferredSize(dim);
		btn.addActionListener(this);
		return btn;
	}
	
	/**
	 * creates and shows the GUI
	 */
	private static void createAndShowGUI() {
		 //Create and set up the window.
    	final JFrame mainFrame = new JFrame("Name");
    	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	mainFrame.setExtendedState(mainFrame.MAXIMIZED_BOTH);
    	
    	final Prak2 content = new Prak2();
    	mainFrame.setContentPane(content);
    	        
    	//Display the window.
    	mainFrame.setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(final String[] args) {
		createAndShowGUI();
	}

}
 

Dragonfire

Bekanntes Mitglied
Mal eine kleine Anmerkung,
seit wann geht:

Java:
add(BorderLayout.NORTH, sp);

oO ?

Das ruft doch:

Java:
public Component add(String name, Component comp)

auf.

--------------

Muss das nicht:

Java:
add(sp, BorderLayout.NORTH);

sein?

Java:
public void add(Component comp, Object constraints)

Ps.: Zu den Tabellen schau dir nochmal folgenden Link an:
How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JSplitPane / JTabbedPane Größe AWT, Swing, JavaFX & SWT 3
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
M Buttons in JSplitPane hinzufügen AWT, Swing, JavaFX & SWT 6
L JSplitPane - auf Änderung reagieren AWT, Swing, JavaFX & SWT 4
D JSplitPane lässt sich nicht verschieben AWT, Swing, JavaFX & SWT 3
M Swing JSplitPane beide Seiten fixieren AWT, Swing, JavaFX & SWT 2
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
D JSplitPane -> setRightComponent aus anderer Klasse AWT, Swing, JavaFX & SWT 3
B JSplitPane AWT, Swing, JavaFX & SWT 4
J Swing Problem - Abspeichern JSplitPane Position AWT, Swing, JavaFX & SWT 5
Burny91 Swing Vertical JSplitPane lässt sich nicht nach rechts verschieben AWT, Swing, JavaFX & SWT 2
C JSplitPane Divider fixieren AWT, Swing, JavaFX & SWT 2
S JSplitpane in BorderLayout nutzen AWT, Swing, JavaFX & SWT 4
S JSplitPane rechtes JPanel aus subpanel ändern AWT, Swing, JavaFX & SWT 3
G JSplitPane DividerLocation AWT, Swing, JavaFX & SWT 2
P Swing JSplitPane mehrere Teiler AWT, Swing, JavaFX & SWT 3
W JSplitPane wegräumen AWT, Swing, JavaFX & SWT 5
T Swing JSplitPane Componenten ausrichten AWT, Swing, JavaFX & SWT 4
T Expand/Collape JSplitPane programmatically AWT, Swing, JavaFX & SWT 3
T Swing JSplitPane erstellen AWT, Swing, JavaFX & SWT 2
R JSplitPane automatisch ausblenden AWT, Swing, JavaFX & SWT 13
H Swing Darstellungsproblem JPanel in JPanel in JScrollpane in JSplitPane AWT, Swing, JavaFX & SWT 4
multiholle JSplitPane und MousListener AWT, Swing, JavaFX & SWT 8
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G JSplitPane nur in eine richtung? AWT, Swing, JavaFX & SWT 3
T Probleme mit JSplitPane, JScrollPane, JTree AWT, Swing, JavaFX & SWT 3
G JSplitPane unf JTable automatisch anpassen AWT, Swing, JavaFX & SWT 2
H Look & Feel und JSplitPane Problem AWT, Swing, JavaFX & SWT 17
J JSplitpane separator soll nicht seine Position veraendern? AWT, Swing, JavaFX & SWT 3
J Border bei JSplitPane entfernen? AWT, Swing, JavaFX & SWT 2
A JSplitPane in JInternalFrame AWT, Swing, JavaFX & SWT 2
M JSplitPane ein JPanel hinzufügen und zentrieren. AWT, Swing, JavaFX & SWT 9
S JSplitPane mit einer Grenze AWT, Swing, JavaFX & SWT 4
T Probleme mit JSplitPane AWT, Swing, JavaFX & SWT 4
DeeDee0815 JSplitPane.expandTopLeftRightOrBottomComponent(); AWT, Swing, JavaFX & SWT 2
C JSplitPane automatische Veränderung verbieten. AWT, Swing, JavaFX & SWT 3
O JSplitPane und JTabbedPane AWT, Swing, JavaFX & SWT 8
G JSplitPane - setOneTouchExpandable AWT, Swing, JavaFX & SWT 3
N JSplitPane soll JFrame resizen AWT, Swing, JavaFX & SWT 4
S Eine Art JInternalFrame in JSplitPane AWT, Swing, JavaFX & SWT 3
S SWT <=> JSplitPane AWT, Swing, JavaFX & SWT 4
M Ansichtswechsel in JSplitPane AWT, Swing, JavaFX & SWT 2
M JSplitPane und JList aktualisieren AWT, Swing, JavaFX & SWT 4
S JDesktopPane mit JSplitPane und JTree AWT, Swing, JavaFX & SWT 3
H JSplitPane lässt sich nicht über rechtes Panel ziehen AWT, Swing, JavaFX & SWT 2
T 3-teiliges JSplitPane AWT, Swing, JavaFX & SWT 13
B BorderLayout/JSplitPane Problem beim Ausrichten AWT, Swing, JavaFX & SWT 5
B Component in JSplitPane aktualisieren AWT, Swing, JavaFX & SWT 2
J JSplitPane reagiert nicht auf SetDeviderLocation() AWT, Swing, JavaFX & SWT 2
J JSplitPane Felder ansprechen AWT, Swing, JavaFX & SWT 3
M JSplitPane Divider setzen? AWT, Swing, JavaFX & SWT 3
G Weiches automatisches verschieben eines JSplitPane-Dividers? AWT, Swing, JavaFX & SWT 3
T JSplitPane immer gleich groß machen AWT, Swing, JavaFX & SWT 3
A problem mit update nach event, JSplitpane spinnt AWT, Swing, JavaFX & SWT 2
D Probleme bei JSplitPane mit JScrollPanes und Panels. AWT, Swing, JavaFX & SWT 4
R JSplitPane problem AWT, Swing, JavaFX & SWT 3
R JSplitPane setRightComponent AWT, Swing, JavaFX & SWT 2
O JSplitpane . AWT, Swing, JavaFX & SWT 9
R JSplitPane (linke und rechte Seite) AWT, Swing, JavaFX & SWT 4
T JSplitPane & JTable AWT, Swing, JavaFX & SWT 4
M JSplitPane Listener AWT, Swing, JavaFX & SWT 2
V JTable in JSplitPane? Wie AWT, Swing, JavaFX & SWT 2
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Yonnig JavaFX Größe von WebView an Content anpassen AWT, Swing, JavaFX & SWT 3
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
M Java FX größe der shapes anpassen AWT, Swing, JavaFX & SWT 0
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
J Swing Pane im SplitPane automatische Größe aktivieren AWT, Swing, JavaFX & SWT 0
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
L JavaFX ListView Größe anpassen AWT, Swing, JavaFX & SWT 1
Neumi5694 Größe von Komboboxen neu berechnen AWT, Swing, JavaFX & SWT 3
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
C Größe des Mauszeigers ermitteln AWT, Swing, JavaFX & SWT 5
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben