JTable Spalten namen

hier nochmal eine überarbeitete Version der ganzen klasse:

Java:
public class NewList extends JFrame
{
	public NewList()
	{
		setSize(400, 300);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(false);
		setVisible(true);
		setLayout(null);
		
		JPanel p = new JPanel();
		
		JLabel Label1 = new JLabel("Name der Liste:");
		Label1.setFont(new Font("Arial",Font.BOLD,16));
		Label1.setBounds(10, 10, 120, 20);
		
		JTextField ListName = new JTextField();
		ListName.setBounds(140, 10, 200, 20);
		
		String[] titles = new String[]{ "Deutsch", "Englisch" };
		DefaultTableModel model = new DefaultTableModel(titles,10);
		JTable table = new JTable(model);
		table.setRowHeight(20);
		table.setBounds(50, 50, 300, 200);
		
		JScrollPane scrollPane = new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
												  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollPane.setViewportView(table);
		
		
		p.add(Label1);
		p.add(ListName);
		p.add(table);
		p.add(scrollPane);
		add(p);
	}
}

Das Problem hier ist, das er in dem fenster nichts anzeigt, also einfach ein leeres Fenster
 
Warum er da nichts anzeigt, weiß ich jetzt auf Anhieb auch nicht genau, hab ich mich auch nicht näher mit beschäftigt, ich vermute es hat was mit dem JPanel zu tun, warum nimmst du überhaupt eins? Setz es doch einfach direkt auf das JFrame...
Das dass vorher mit dem setSize() und setLocation() nicht funktioniert hat, ist klar, weil du es auch auf die Tabelle angewendet hast, aber die Tabelle im JScrollPane ist, also gar keinen Einfluss auf seine Position im JFrame nehmen kann.
Hier mal wieder eine überarbeitete Version von mir:

Java:
public class Test extends JFrame{
 
    public Test() {
		super("Hallo");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        setLayout(null);
        
        JLabel label1 = new JLabel("Name der Liste:");
        label1.setFont(new Font("Arial",Font.BOLD,16));
        label1.setBounds(10, 10, 120, 20);
        
        JTextField listName = new JTextField();
        listName.setBounds(140, 10, 200, 20);
        
        String[] titles = new String[]{ "Deutsch", "Englisch" };
        DefaultTableModel model = new DefaultTableModel(titles,10);
        JTable table = new JTable(model);
        table.setRowHeight(20);
        
        JScrollPane scrollPane = new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                                                  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setViewportView(table);
		scrollPane.setBounds(50, 50, 300, 200);
        
        
        add(label1);
		add(listName);
		add(scrollPane);
		setVisible(true);
    }
 
    public static void main(String[] args) {
        new Test();
    }
}

Jetzt kannst du bei scrollPane.setBounds(xPos,yPos,xLenght,yLength) rumschrauben wie du willst und oh Wunder, die Tabelle verschiebt sich :)

EDIT: Kleine Anmerkung noch, und zwar empfehle ich dir Objekt-Namen mit einem Klein-Buchstaben zu beginnen(Also listName anstatt ListName). Da Klassennamen schon von Sun aus immer groß geschrieben werden, hat es sich so eingebürgert, dass Klassennamen weiterhin groß geschrieben werden und Objektnamen klein, dadurch kann man diese schnell voneinander unterscheiden(Stichpunkt: statische Member).
 
Zuletzt bearbeitet:
ah wunder bar so klappt es! Vielen Dank!

Aber ich dachte man muss die Componenten erst auf einen Container machen, wie zumbeispiel das JPanel, ... scheint aber ja nicht der fall zu sein :) ^^ ... aber dann versteh ich nicht ganz wozu das Panel gut sein soll
 
Schon mal gesehen, wovon JFrame abgeleitet wird? ;)
java.lang.Object
->java.awt.Component
->java.awt.Container
->java.awt.Window
->java.awt.Frame
->javax.swing.JFrame

Es stimmt schon, dass Komponenten auf einen Container gesetzt werden müssen.
JPanels sind gut zum Gruppieren von Elementen, z.B. für foreach Schleifen.
Oder um einen Rahmen um bestimmte Elemente zu setzen und sie so optisch von anderen Elementen zu trennen.
 
Bei mir ist wieder so ein problem entstanden :(
Ich habe jetzt das Hauptfenster angepasst, so das es mit dem gleichen prinzip funktioniert, also das JPanel weg und so.
Nur lassen sich jetzt die Componenten nicht mehr richtig setzten und auch die größe lässt sich nicht anpassen, obwohl es wie bei dem andern fenster ist wo alles tadellos funktioniert!
So siehts aus:
Java:
	public MainFrame()
	{
		super("Vocable Teacher!");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(400,300);
		setLocationRelativeTo(null);
		setResizable(false);
		setVisible(true);


		
		JMenuBar Menu = new JMenuBar ();
		Menu.setBackground(new Color(218, 222, 239));
	                     JMenu MenuItem = new JMenu("Menu");
		MenuItem.add(new JMenuItem("neue Liste hinzufügen"));
		MenuItem.add(new JMenuItem("Listen Bearbeiten"));
		MenuItem.add(new JMenuItem("Einstellungen"));
		MenuItem.add(new JMenuItem("Beenden"));
		
		MenuItem.getItem(0).addActionListener(Actions().get(1));
		MenuItem.getItem(3).addActionListener(Actions().get(0));
		Menu.add(MenuItem);
		
		
		
		JLabel label1 = new JLabel("Vocable Teacher", JLabel.CENTER);
		label1.setBounds((getWidth() / 2 - (label1.getWidth() / 2)), 0, 600, 100);
		label1.setFont(new Font("Arial",Font.BOLD,35));
		
		
		
		JButton startButton = new JButton("Start");
		startButton.setBounds((getWidth() / 2) - (startButton.getWidth() / 2), 210, 90, 35 );
		startButton.setFont(new Font("Arial",Font.BOLD,22));		
		startButton.setFocusPainted(false); // innerer Rahmen weg
		
		
		setJMenuBar(Menu);
		add(startButton);
		add(label1);
	}
 
Was genau kannst du bei dir den nicht verändern?

Ich hab dein Beispiel genommen, leicht manipuliert (die Zeilen mit den "Actions().get(x)" auskommentiert, die Funktion Actions hab ich nämlich nicht ;) ) und getestet. Den Button kann ich rumschieben wie ich will, das JLabel natürlich nicht, weil es ja auf mittig gesetzt wurde (new JLabel("Vocable Teacher", JLabel.CENTER); ).

Könntest du dein Problem genauer beschreiben?
 
Also den button kann ich jetzt auch hin und herschieben (weiss selbst nicht wieso das gerade noch nicht ging xD ) aber beim Label geht es jetzt nicht obwohl ich
Java:
JLabel.CENTER
aus dem konstruktor entfernt habe.
Ich kann weder die größe noch die Position des Labels ändern
 
Das liegt an dem Layout des JFrames. Default-mäßig ist nämlich BorderLayout und das sorgt dafür, dass die ganze GUI ausgefüllt ist - durch dein JLabel. Also einmal setLayout(null); Dann merkst du auch gleich, dass dein JLabel viel zu groß ist ;)

Kleiner Tipp, hat mir eben beim Testen gut geholfen, um zu sehen, wo genau das JLabel jetzt liegt, um es letztendlich vernünftig platzieren zu können, ist ein Rahmen ganz nützlich: "label1.setBorder(new LineBorder(new Color(0,0,0)));"
Viel Spaß noch beim Pixel-Schubsen :D

Gruß

Matt
 
ahhhhh! Vielen Dank, jetzt funktioniert es wie es soll! Und das beste is, ich glaub ich habs auch verstanden xD ^^
Endlich kann ich mit dem wesentlichen des programms weiter machen :)

Vielen dank nochmal :)
 

Neue Beiträge

Zurück