import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class TransparentPanel { TPanel lowerPanel, upperPanel; public TransparentPanel() { initGUI(); } private void initGUI() { JFrame frame = new JFrame("Teiltransparentes JPanel"); frame.setSize(300, 300); lowerPanel = new TPanel("Ein Text im unteren Panel", new Color(0f, 0f, 1f, 0.5f), new Color(1f, 1f, 0f, 0.6f), 300, 300, frame); Dimension ldim = new Dimension(frame.getWidth(), frame.getHeight()); lowerPanel.setPreferredSize(ldim); lowerPanel.setMinimumSize(ldim); lowerPanel.setSize(ldim); upperPanel = new TPanel("Ein oberer Text", new Color(1f, 0f, 0f, 0.6f), new Color(0f, 0f, 0f, 0.4f), 200, 200, frame); Dimension udim = new Dimension(frame.getWidth() - 60, frame.getHeight() - 60); upperPanel.setPreferredSize(udim); upperPanel.setMinimumSize(udim); upperPanel.setSize(udim); frame.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; add(upperPanel, gbc, 1, 1, 1, 1, frame); add(lowerPanel, gbc, 1, 1, 1, 1, frame); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } public void add(Component c, GridBagConstraints constraints, int x, int y, int w, int h, Container p) { constraints.gridx = x; constraints.gridy = y; constraints.gridwidth = w; constraints.gridheight = h; p.add(c, constraints); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new TransparentPanel()); } } class TPanel extends JPanel { String txt; Color fgColor, bgColor; int width, height; Component parent; public TPanel(int width, int height, Component parent) { this("", parent.getBackground(), parent.getForeground(), width, height, parent); } public TPanel(String txt, Color bgColor, Color fgColor, int width, int height, Component parent) { this.txt = txt; this.fgColor = fgColor; this.bgColor = bgColor; this.width = width; this.height = height; this.parent = parent; setOpaque(false); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(bgColor); int start = (parent.getWidth() - width) / 2; g.fillRect(start, start, width, height); g.setColor(fgColor); g.setFont(new Font("Verdana", Font.BOLD, 20)); for (int i = 0; i < 15; ++i) { g.drawString(txt + "\n", start + 5, start + 20 + i * 20); } } }