Hi Leute,
Ich bin neu hier im Forum.
Und Java mach ich auch noch nicht so lange.
Der sinn meines Programms:
Mein Programm soll ein Manager werden, für den ich JTabbedPane verwende (also Tabs/Registerkarten).
Der letzte Tab (rechts) ist ein "+ Tab", mit dem man ein neuen Tab hinzufügen kann.
Jeder Tab hat einen "+ Button" mit dem man (jetzt nur zum test) eine Button mit Text hinzufügen kann.
Was macht mein Programm:
In meinem Programm hab ich ein ActionListener für einen Tab, der einen neuen Tab erstellt der eine Methode aufruft. Diese Methode erstellt einen Button und weist ihm einen ActionListener zu. Dieser Button erstellt einen anderen Button (wobei das nur ein testbutton ist).
Das Problem:
Der neu erstellte (also zweite) Button wird aber erst angezeigt, wenn ich die Linke oder rechte Maustaste klicke, den Cursor über einen Tab halte.
Wie gesagt programmier ich noch nicht lange. Von daher kann es sein, dass ich nur eine kleinigkeit übersehen hab.
Also hier der Code:
(Wundert euch nicht, dass einiges "static" ist und in den einzelnen Tabs immer das selbe ist, denn ich habe mein Programm zur problemfindung gekürzt und vereinfacht).
Ich bin neu hier im Forum.
Und Java mach ich auch noch nicht so lange.
Der sinn meines Programms:
Mein Programm soll ein Manager werden, für den ich JTabbedPane verwende (also Tabs/Registerkarten).
Der letzte Tab (rechts) ist ein "+ Tab", mit dem man ein neuen Tab hinzufügen kann.
Jeder Tab hat einen "+ Button" mit dem man (jetzt nur zum test) eine Button mit Text hinzufügen kann.
Was macht mein Programm:
In meinem Programm hab ich ein ActionListener für einen Tab, der einen neuen Tab erstellt der eine Methode aufruft. Diese Methode erstellt einen Button und weist ihm einen ActionListener zu. Dieser Button erstellt einen anderen Button (wobei das nur ein testbutton ist).
Das Problem:
Der neu erstellte (also zweite) Button wird aber erst angezeigt, wenn ich die Linke oder rechte Maustaste klicke, den Cursor über einen Tab halte.
Wie gesagt programmier ich noch nicht lange. Von daher kann es sein, dass ich nur eine kleinigkeit übersehen hab.
Also hier der Code:
(Wundert euch nicht, dass einiges "static" ist und in den einzelnen Tabs immer das selbe ist, denn ich habe mein Programm zur problemfindung gekürzt und vereinfacht).
Java:
package listenerProblem;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TheProblem extends JFrame{
static JPanel mainPanel = new JPanel();
static JTabbedPane pane = new JTabbedPane();
static JPanel listPanel;
static JButton plusButton;
static String listName;
public static void addWButton(String buttonName){
JButton newButton = new JButton();
newButton.setText(buttonName);
newButton.setVisible(true);
newButton.setMaximumSize(new Dimension(100,100));
listPanel.add(newButton);
}
public static void createNewList(){
int i = 0;
listPanel = new JPanel();
listPanel.setVisible(true);
listPanel.setLayout(new BoxLayout(listPanel, BoxLayout.PAGE_AXIS));
plusButton = new JButton("+");
plusButton.setVisible(true);
plusButton.setSize(100, 100);
listPanel.add(plusButton);
pane.setComponentAt(i, listPanel);
i++;
//
// v WICHTIG
plusButton.addActionListener(new ActionListener() {
// ^ WICHTIG
//
@Override
public void actionPerformed(ActionEvent arg0) {
String buttonName = JOptionPane.showInputDialog("Name des neuen Buttons", listName);
if(buttonName != null){
addWButton(buttonName);
}
}
});
}
public TheProblem(){
setSize(500, 400);
setVisible(true);
setTitle("Listener Problem");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.addTab("Tab 1", null);
createNewList();
pane.addTab("+", null);
getContentPane().add(mainPanel);
mainPanel.add(pane);
mainPanel.setLayout(new GridLayout(0,1));
//
// v WICHTIG
pane.addChangeListener(new ChangeListener() {
// ^ WICHTIG
//
@Override
public void stateChanged(ChangeEvent arg0) {
if(pane.getSelectedIndex() == (pane.getTabCount() -1)){ // Wenn der selektierte Tab der Letzte (+) ist.
pane.setSelectedIndex(pane.getTabCount() -2); // Der vor dem + Tab ausgewählte Tab wird ausgewählt, da der + Tab nicht ausgewählt werden soll.
// Optionsfenster für den Namen der Liste
listName = JOptionPane.showInputDialog("Name der neuen Liste", "List 1");
if(listName != null){ // Wenn der User das Fenster nicht geschlossen hat oder auf Abrechen geklickt hat.
if(listName.isEmpty() == false){// Wenn der User etwas eingegeben hat
pane.removeTabAt(pane.getTabCount() -1); //Der letzte Tab (der immer der + Tab ist) wird gelöscht.
pane.add(listName, null);//Der neue Tab wird mit Listenname angelegt.
//
// v WICHTIG
createNewList();
// ^ WICHTIG
//
pane.add("+",null);//Zum schluss wird wieder der + Tab angehängt
pane.setSelectedIndex(pane.getTabCount() -2); // Der Vorletzte Tab wird selekiert da sonnst der + tab selektiert ist.
}
}
}
}
});
}
}