Realisierung Gradient in der Titlebar JInternalFrame

Status
Nicht offen für weitere Antworten.
W

WolfgangM

Gast
Hallo,

ich versuche einen Gradient-Hintergrund für die Titlebar von einem JInternalFrame zu erzeugen. Folgender Quelltext geht aber voll daneben:
Code:
//begin
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;


import com.sun.java.swing.plaf.windows.WindowsInternalFrameTitlePane;

import java.awt.event.*;
import java.awt.*;


public class InternalFrameTitlebarGradient 

extends JFrame {

public InternalFrameTitlebarGradient() {
  super("InternalFrame Without TitleBar");
  
  JInternalFrame frame = new JInternalFrame();
  
  
  BasicInternalFrameTitlePane wi = new BasicInternalFrameTitlePane(frame){
  //Alternativ
  //WindowsInternalFrameTitlePane wi = new WindowsInternalFrameTitlePane(frame){
  
      public void paintComponent(Graphics g)
      {
        setOpaque(false);
        Graphics2D g2d = (Graphics2D) g;
        Paint newPaint = new GradientPaint(0,0,Color.yellow,0,33,Color.orange,true);
        g2d.setPaint(newPaint);
        g2d.fillRect(0,0,getHeight(),getHeight());
      }
  	};
  	BasicInternalFrameUI ui=(BasicInternalFrameUI)frame.getUI();
  	
    wi.setPreferredSize(new Dimension(22, 33));
    wi.setMaximumSize(new Dimension(22, 33));
    ui.setNorthPane(wi);
  
    frame.setTitle("Test");
  	frame.setBounds(30,30,100,200);
  	frame.setVisible(true);
  
    JDesktopPane desktop = new JDesktopPane();
    desktop.add(frame);
    setContentPane(desktop);
  }
  
  public static void main(String[] args)
  {
    InternalFrameTitlebarGradient frame = new InternalFrameTitlebarGradient();
    frame.setBounds(30,30,300,300);
    frame.setVisible(true);
  }
}
//end
Hoffe, jemand kann helfen.

Vielen Dank im voraus.

Viele Grüße
Wolfgang
 
W

WolfgangM

Gast
Code:
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;


import java.awt.event.*;
import java.awt.*;


public class InternalFrameTitlebarGradient 

extends JFrame {

public InternalFrameTitlebarGradient() {
  super("InternalFrame Without TitleBar");
  
  JInternalFrame frame = new JInternalFrame();
  
  
  BasicInternalFrameTitlePane wi = new BasicInternalFrameTitlePane(frame){
  
      public void paintComponent(Graphics g)
      {
        setOpaque(false);
        Graphics2D g2d = (Graphics2D) g;
        Paint newPaint = new GradientPaint(0,0,Color.yellow,0,33,Color.orange,true);
        g2d.setPaint(newPaint);
        g2d.fillRect(0,0,getHeight(),getHeight());
      }
  	};
  	BasicInternalFrameUI ui=(BasicInternalFrameUI)frame.getUI();
  	
    wi.setPreferredSize(new Dimension(22, 33));
    wi.setMaximumSize(new Dimension(22, 33));
    ui.setNorthPane(wi);
  
    frame.setTitle("Test");
  	frame.setBounds(30,30,100,200);
  	frame.setVisible(true);
  
    JDesktopPane desktop = new JDesktopPane();
    desktop.add(frame);
    setContentPane(desktop);
  }
  
  public static void main(String[] args)
  {
    InternalFrameTitlebarGradient frame = new InternalFrameTitlebarGradient();
    frame.setBounds(30,30,300,300);
    frame.setVisible(true);
  }
}
aber das Problem bleibt.

Gruß
Wolfgang

*Wildcard - Codetags repariert*
 

Wildcard

Top Contributor
Sowas?
Code:
import javax.swing.*;
import javax.swing.plaf.InternalFrameUI;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import javax.swing.plaf.metal.MetalInternalFrameUI;


import java.awt.event.*;
import java.awt.*;


public class InternalFrameTitlebarGradient

extends JFrame {

public InternalFrameTitlebarGradient() {
  super("InternalFrame Without TitleBar");
 
  JInternalFrame frame = new JInternalFrame();
 
  setDefaultCloseOperation(EXIT_ON_CLOSE);
     frame.setUI(new MetalInternalFrameUI(frame){
	
		@Override
		protected JComponent createNorthPane(JInternalFrame w) {
			return new CustomPane(w);
		}
	
	});
 
    frame.setTitle("Test");
     frame.setBounds(30,30,100,200);
     frame.setVisible(true);
 
    JDesktopPane desktop = new JDesktopPane();
    desktop.add(frame);
    setContentPane(desktop);
  }
 
  public static void main(String[] args)
  {
    InternalFrameTitlebarGradient frame = new InternalFrameTitlebarGradient();
    frame.setBounds(30,30,300,300);
    frame.setVisible(true);
  }
}

class CustomPane extends BasicInternalFrameTitlePane
{

	public CustomPane(JInternalFrame f) {
		super(f);
	}
	
    public void paintComponent(Graphics g)
    {
      setOpaque(false);
      Graphics2D g2d = (Graphics2D) g;
      Paint newPaint = new GradientPaint(0,0,Color.yellow,0,getWidth(),Color.orange,true);
      g2d.setPaint(newPaint);
      g2d.fillRect(0,0,getWidth(),getHeight());
    }
	
}
 
W

WolfgangM

Gast
... wow

aber ich kann den Titeltext nicht etablieren.

Gruß
Wolfgang
 

Wildcard

Top Contributor
Da paintComponent überschrieben ist musst du dich selbst darum kümmern.
Du kannst aber auch ein Label auf die CustomPane legen.
 
W

WolfgangM

Gast
... thanks a lot.

Vielleicht noch eine letzte Fragestellung zur Prozedur des Minimierens des JInternalFrame; können die danach sichtbaren Komponenten (Pane zum Drag;Button zum Wiederherstellen) angesprochen werden, um in ähnlicher Weise mit einem Gradient ausgestattet zu werden.

Gruß
Wolfgang
 

Wildcard

Top Contributor
Hmm, ich kann dir aus dem Stehgreif nicht sagen was da intern abläuft.
Schau dir mal an was ab der JInternalFrameBasicTitlePane$IconifyAction abläuft...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben