Hallo Leute!
Ich habe ein großes Problem!
Und zwar versuche ich nun seit einigen Stunden bei meinen Tabs diesen CloseButton zu programmieren!
Ich habe dazu die Demos von Oracle verwendet
How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
Leider funktioniert es bei mir aber irgendwie nicht! Mein x befindet sich immer im TabbedPane und nicht dort wo zb. "TAB 1" steht!
Ein Problem dürfte evtl. sein, dass ich beim erzeugen eines neuen Tabs, als Component ein von mir gestaltetes Panel übergebe! Da dieses Singleton ist mache ich vl. etwas falsch!
Weil ich habe den Code aus dem Beispiel von Oracle http://download.oracle.com/javase/tutorial/uiswing/examples/components/TabComponentsDemoProject/src/components/ButtonTabComponent.java einfach in meinen Konsturktor kopiert und auf meine Werte abgeändert???
Mein Panel welches ich einfügen möchte:
Meine HauptGUI in der sich das JTabbedPane befindet
jdpHauptfenster ist der Name meines JTabbedPane, das ich per GUIBuilder einfüge!
Wäre echt super wenn mir jemand helfen könnte?!
Danke schon mal im Voraus!
max
Ich habe ein großes Problem!
Und zwar versuche ich nun seit einigen Stunden bei meinen Tabs diesen CloseButton zu programmieren!
Ich habe dazu die Demos von Oracle verwendet
How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
Leider funktioniert es bei mir aber irgendwie nicht! Mein x befindet sich immer im TabbedPane und nicht dort wo zb. "TAB 1" steht!
Ein Problem dürfte evtl. sein, dass ich beim erzeugen eines neuen Tabs, als Component ein von mir gestaltetes Panel übergebe! Da dieses Singleton ist mache ich vl. etwas falsch!
Weil ich habe den Code aus dem Beispiel von Oracle http://download.oracle.com/javase/tutorial/uiswing/examples/components/TabComponentsDemoProject/src/components/ButtonTabComponent.java einfach in meinen Konsturktor kopiert und auf meine Werte abgeändert???
Mein Panel welches ich einfügen möchte:
Java:
package gui;
import business.*;
import data.*;
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;
public class WinkelEinstellungenPanel extends javax.swing.JPanel
{
private final JTabbedPane tabbedPane;
/** Creates new form WinkelEinstellungenPanel */
private WinkelEinstellungenPanel(final JTabbedPane tabbedPane)
{
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
if (tabbedPane == null)
{
throw new NullPointerException("TabbedPane is null");
}
this.tabbedPane = tabbedPane;
setOpaque(false);
//make JLabel read titles from JTabbedPane
JLabel label = new JLabel()
{
public String getText()
{
int i = tabbedPane.indexOfTabComponent(WinkelEinstellungenPanel.this);
if (i != -1)
{
return tabbedPane.getTitleAt(i);
}
return null;
}
};
add(label);
//add more space between the label and the button
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
//tab button
JButton button = new TabButton();
add(button);
//add more space to the top of the component
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
initComponents();
//Erstellen des Formatierten Textfeldes für den GesamtWinkelSoll
NumberFormat numberFormat = NumberFormat.getIntegerInstance();
tfWinkelGesSoll = new JFormattedTextField(numberFormat);
tfWinkelGesSoll.setColumns(8);
GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 6;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
paEingabe.add(tfWinkelGesSoll, gridBagConstraints);
//Laden der Datei
String pfad = System.getProperty("user.dir") + "//Daten//Bilddateien//Für Winkeleinstellung2.jpg";
JLabel lab = new JLabel(new ImageIcon(pfad));
paSkizze.add(lab);
winkelIstThread = new SetWinkelIstThread();
isWinkelEinstellenPressed = false;
shortcutInitialisierung();
}
private class TabButton extends JButton implements ActionListener
{
public TabButton()
{
int size = 17;
setPreferredSize(new Dimension(size, size));
setToolTipText("close this tab");
//Make the button looks the same for all Laf's
setUI(new BasicButtonUI());
//Make it transparent
setContentAreaFilled(false);
//No need to be focusable
setFocusable(false);
setBorder(BorderFactory.createEtchedBorder());
setBorderPainted(false);
//Making nice rollover effect
//we use the same listener for all buttons
addMouseListener(buttonMouseListener);
setRolloverEnabled(true);
//Close the proper tab by clicking the button
addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
int i = tabbedPane.indexOfTabComponent(WinkelEinstellungenPanel.this);
if (i != -1)
{
tabbedPane.remove(i);
}
}
//we don't want to update UI for this button
public void updateUI()
{
}
//paint the cross
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
//shift the image for pressed buttons
if (getModel().isPressed())
{
g2.translate(1, 1);
}
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.BLACK);
if (getModel().isRollover())
{
g2.setColor(Color.MAGENTA);
}
int delta = 6;
g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);
g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);
g2.dispose();
}
}
private final static MouseListener buttonMouseListener = new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent e)
{
Component component = e.getComponent();
if (component instanceof AbstractButton)
{
AbstractButton button = (AbstractButton) component;
button.setBorderPainted(true);
}
}
@Override
public void mouseExited(MouseEvent e)
{
Component component = e.getComponent();
if (component instanceof AbstractButton)
{
AbstractButton button = (AbstractButton) component;
button.setBorderPainted(false);
}
}
};
/** @return Liefert die einzige Instanz dieser Klasse */
public static synchronized WinkelEinstellungenPanel getInstance(final JTabbedPane tabbedPane)
{
if (winkelEinstellungsInstance == null)
{
winkelEinstellungsInstance = new WinkelEinstellungenPanel(tabbedPane);
}
return winkelEinstellungsInstance;
}
}
Meine HauptGUI in der sich das JTabbedPane befindet
Java:
private void onWinkelEinstellungen(java.awt.event.ActionEvent evt)
{
initTabComponent(0);
jdpHauptfenster.add("Winkeleinstellungen",new JLabel("Winkeleinstellungen"));
jdpHauptfenster.setComponentAt(1,WinkelEinstellungenPanel.getInstance(jdpHauptfenster));
}
private void initTabComponent(int i)
{
jdpHauptfenster.setComponentAt(i, new ButtonTabComponent(jdpHauptfenster));
//die Klasse ButtonTabComponent ist die Beispielklasse von Oracle
}
jdpHauptfenster ist der Name meines JTabbedPane, das ich per GUIBuilder einfüge!
Wäre echt super wenn mir jemand helfen könnte?!
Danke schon mal im Voraus!
max