Nebuk
Lieutenant
- Registriert
- Sep. 2009
- Beiträge
- 892
Hallo zusammen
Ich hab mal wieder eine JAVA Frage und bin mir sicher, dass ihr mir das mit links beantworten könnt.
Ich wollte mir ein kleines Programm schreiben, welches mir je nachdem, welchen Knopf ich drücke, eine entsprechende Anzahl Elemente (in diesem Beispiel Buttons) erstellt.
Im Prinzip funktioniert es eigentlich auch fast so, wie ich es gerne hätte. Das heisst, wenn ich es im Code zuweise, ändern sich die Anzahl der Buttons. Führe ich den Code aus (Eclipse), und drücke den dafür vorgesehenen Knopf (--> Im Code wäre es z.B. "Test1"), bleibt das Fenster leer.
Wie bekomme ich es nun hin, dass es mir wie gewünscht das Panel neu zeichnet. Was ich mir bisher gegooglet habe, hat mir nichts geholfen. Versucht habe ich es jeweils mit:
und allen erdenklichen Variationen...
Da alles nichts geholfen hatte, versuchte ich das Panel zu entfernen (mainPanel.remove() Dies funktionierte wie gewünscht, das Panel blieb leer. Als nächstes versuchte ich das Panel erst zu löschen und danach wieder zu adden, leider blieb auch hier der Erfolg aus.
Könnte mir jemand vielleicht helfen und sagen wo ich hier einen Fehler mache? Langsam glaube ich nämlich, dass das neuzeichnen eigentlich funktioniert aber ich sonst irgendwo einen Fehler mache...
Zu guter Letzt, hier noch mein Code:
Danke und Gruss
Nebuk
PS. Hoffentlich ist der Code einigermassen durchschaubar.
Ich hab mal wieder eine JAVA Frage und bin mir sicher, dass ihr mir das mit links beantworten könnt.
Ich wollte mir ein kleines Programm schreiben, welches mir je nachdem, welchen Knopf ich drücke, eine entsprechende Anzahl Elemente (in diesem Beispiel Buttons) erstellt.
Im Prinzip funktioniert es eigentlich auch fast so, wie ich es gerne hätte. Das heisst, wenn ich es im Code zuweise, ändern sich die Anzahl der Buttons. Führe ich den Code aus (Eclipse), und drücke den dafür vorgesehenen Knopf (--> Im Code wäre es z.B. "Test1"), bleibt das Fenster leer.
Wie bekomme ich es nun hin, dass es mir wie gewünscht das Panel neu zeichnet. Was ich mir bisher gegooglet habe, hat mir nichts geholfen. Versucht habe ich es jeweils mit:
Code:
fenster.repaint();
fenster.validate();
fenster.setVisible();
mainPanel.repaint();
mainPanel.validate();
mainPanel.setVisible();
Da alles nichts geholfen hatte, versuchte ich das Panel zu entfernen (mainPanel.remove() Dies funktionierte wie gewünscht, das Panel blieb leer. Als nächstes versuchte ich das Panel erst zu löschen und danach wieder zu adden, leider blieb auch hier der Erfolg aus.
Könnte mir jemand vielleicht helfen und sagen wo ich hier einen Fehler mache? Langsam glaube ich nämlich, dass das neuzeichnen eigentlich funktioniert aber ich sonst irgendwo einen Fehler mache...
Zu guter Letzt, hier noch mein Code:
Code:
package ch.fhnw.test;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class View implements ActionListener {
private final int Test1 = 8;
private final int Test2 = 18;
private final int Test3 = 32;
private int einstellung = 0;
private int zeile;
JPanel northPanel = makeNorthPanel();
private JButton jb[] = new JButton[einstellung*2+1];
private JFrame fenster = new JFrame("Neuzeichnen");
// GETTER und SETTER
public int getEinstellung() {
return einstellung;
}
public void setEinstellung(int einstellung) {
this.einstellung = einstellung;
}
public int getZeile() {
return zeile;
}
public void setZeile(int zeile) {
this.zeile = zeile;
}
// GETTER und SETTER
// MAIN
public static void main(String[] args) {
View viewer = new View();
viewer.top();
}
// MAIN
private void top()
{
JPanel mainPanel = makeMainPanel();
fenster.add(mainPanel, BorderLayout.CENTER);
fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Beendet den Task, beim schliessen des Fensters
fenster.add(mainPanel);
fenster.setSize(500,570);
Dimension minimumSize = new Dimension(500,570); // Mindestbreite
fenster.setMinimumSize(minimumSize); // für das Fenster
fenster.setVisible(true);
}
private JPanel makeMainPanel()
{
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
bestueckeMainPanel(mainPanel);
return mainPanel;
}
void bestueckeMainPanel(JPanel mainPanel)
{
JPanel northPanel = makeNorthPanel();
mainPanel.add(northPanel, BorderLayout.NORTH);
JPanel southPanel = makeSouthPanel();
mainPanel.add(southPanel, BorderLayout.SOUTH);
}
private JPanel makeSouthPanel() {
JPanel southPanel = new JPanel();
southPanel.setLayout(new FlowLayout());
bestueckeSouthPanel(southPanel);
return southPanel;
}
private JPanel makeNorthPanel() {
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridBagLayout());
bestueckeNorthPanel(northPanel);
return northPanel;
}
private void bestueckeSouthPanel(JPanel southPanel) {
southPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); // Abstand vom Rand
JButton bt1 = new JButton("Test1");
bt1.addActionListener(this);
JButton bt2 = new JButton("Test2");
bt2.addActionListener(this);
JButton bt3 = new JButton("Test3");
bt3.addActionListener(this);
southPanel.add(bt1);
southPanel.add(bt2);
southPanel.add(bt3);
}
private void bestueckeNorthPanel(JPanel northPanel) {
northPanel.setBorder(BorderFactory.createEmptyBorder(50, 5, 5, 5)); // Abstand vom Rand
GridBagConstraints c = new GridBagConstraints();
if( 8 == getEinstellung()){setZeile(getEinstellung()/2); }
if(18 == getEinstellung()){setZeile(getEinstellung()/3); }
if(32 == getEinstellung()){setZeile(getEinstellung()/4); }
int i = 0;
for(int j = 0 ;j < getZeile(); j++)
{
for(int q = 0; q < getZeile(); q++)
{
jb[i] = new JButton(""+(i+1));
jb[i].addActionListener(this);
jb[i].setPreferredSize(new Dimension(50,50)); // Breite und Höhe der Buttons definieren!
c.gridy = j;
c.gridx = q;
northPanel.add(jb[i], c);
i++;
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
String button = e.getActionCommand();
if(button.equals("Test1"))
{
setEinstellung(Test1);
fenster.repaint();
System.out.println("Test1");
}
if(button.equals("Test2"))
{
setEinstellung(Test2);
System.out.println("Test2");
}
if(button.equals("Test3"))
{
setEinstellung(Test3);
System.out.println("Test3");
}
if(!button.equals("Test1") && !button.equals("Test2") && !button.equals("Test3"))
{
System.out.println(button);
}
}
}
Danke und Gruss
Nebuk
PS. Hoffentlich ist der Code einigermassen durchschaubar.