Java/Swing JFC/Panel
Содержание
Determining When a Component Is Added or Removed from a Container
<source lang="java">
import java.awt.ruponent; import java.awt.event.ContainerAdapter; import java.awt.event.ContainerEvent; import java.awt.event.ContainerListener; import javax.swing.JFrame; public class Main {
public static void main() { ContainerListener listener = new ContainerAdapter() { public void componentAdded(ContainerEvent evt) { Component c = evt.getChild(); } public void componentRemoved(ContainerEvent evt) { Component c = evt.getChild(); } }; JFrame frame = new JFrame(); frame.addContainerListener(listener); }
}
</source>
Getting the Child Components of a Container
<source lang="java">
import java.awt.ruponent; import java.awt.Rectangle; import javax.swing.JFrame; public class Main {
public static void main() { JFrame container = new JFrame(); Component[] components = container.getComponents(); for (int i = 0; i < components.length; i++) { Rectangle bounds = components[i].getBounds(); } }
}
</source>
Horizontal Split Pane based on JPanel
<source lang="java">
/* Copyright (c) 2006, 2009, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.ru/logisim/. */
import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JPanel; public class HorizontalSplitPane extends JPanel {
static final int DRAG_TOLERANCE = 3; private static final Color DRAG_COLOR = new Color(0, 0, 0, 128); abstract static class Dragbar extends JComponent implements MouseListener, MouseMotionListener { private boolean dragging = false; private int curValue; Dragbar() { addMouseListener(this); addMouseMotionListener(this); } abstract int getDragValue(MouseEvent e); abstract void setDragValue(int value); public void paintComponent(Graphics g) { if(dragging) { g.setColor(DRAG_COLOR); g.fillRect(0, 0, getWidth(), getHeight()); } } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { if(!dragging) { curValue = getDragValue(e); dragging = true; repaint(); } } public void mouseReleased(MouseEvent e) { if(dragging) { dragging = false; int newValue = getDragValue(e); if(newValue != curValue) setDragValue(newValue); repaint(); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseDragged(MouseEvent e) { if(dragging) { int newValue = getDragValue(e); if(newValue != curValue) setDragValue(newValue); } } public void mouseMoved(MouseEvent e) { } } private class MyLayout implements LayoutManager { public void addLayoutComponent(String name, Component comp) { } public void removeLayoutComponent(Component comp) { } public Dimension preferredLayoutSize(Container parent) { if(fraction <= 0.0) return comp1.getPreferredSize(); if(fraction >= 1.0) return comp0.getPreferredSize(); Insets in = parent.getInsets(); Dimension d0 = comp0.getPreferredSize(); Dimension d1 = comp1.getPreferredSize(); return new Dimension(in.left + Math.max(d0.width, d1.width) + in.right, in.top + d0.height + d1.height + in.bottom); } public Dimension minimumLayoutSize(Container parent) { if(fraction <= 0.0) return comp1.getMinimumSize(); if(fraction >= 1.0) return comp0.getMinimumSize(); Insets in = parent.getInsets(); Dimension d0 = comp0.getMinimumSize(); Dimension d1 = comp1.getMinimumSize(); return new Dimension(in.left + Math.max(d0.width, d1.width) + in.right, in.top + d0.height + d1.height + in.bottom); } public void layoutContainer(Container parent) { Insets in = parent.getInsets(); int maxWidth = parent.getWidth() - (in.left + in.right); int maxHeight = parent.getHeight() - (in.top + in.bottom); int split; if(fraction <= 0.0) { split = 0; } else if(fraction >= 1.0) { split = maxWidth; } else { split = (int) Math.round(maxHeight * fraction); split = Math.min(split, maxHeight - comp1.getMinimumSize().height); split = Math.max(split, comp0.getMinimumSize().height); } comp0.setBounds(in.left, in.top, maxWidth, split); comp1.setBounds(in.left, in.top + split, maxWidth, maxHeight - split); dragbar.setBounds(in.left, in.top + split - DRAG_TOLERANCE, maxWidth, 2 * DRAG_TOLERANCE); } } private class MyDragbar extends Dragbar { MyDragbar() { setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR)); } int getDragValue(MouseEvent e) { return getY() + e.getY() - HorizontalSplitPane.this.getInsets().top; } void setDragValue(int value) { Insets in = HorizontalSplitPane.this.getInsets(); setFraction((double) value / (HorizontalSplitPane.this.getHeight() - in.bottom - in.top)); revalidate(); } } private JComponent comp0; private JComponent comp1; private MyDragbar dragbar; private double fraction; public HorizontalSplitPane(JComponent comp0, JComponent comp1) { this(comp0, comp1, 0.5); } public HorizontalSplitPane(JComponent comp0, JComponent comp1, double fraction) { this.rup0 = comp0; this.rup1 = comp1; this.dragbar = new MyDragbar(); // above the other components this.fraction = fraction; setLayout(new MyLayout()); add(dragbar); // above the other components add(comp0); add(comp1); } public double getFraction() { return fraction; } public void setFraction(double value) { if(value < 0.0) value = 0.0; if(value > 1.0) value = 1.0; if(fraction != value) { fraction = value; revalidate(); } }
}
</source>
Panel with background image
<source lang="java">
import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageTest {
public static void main(String[] args) { ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage()); JFrame frame = new JFrame(); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); }
} class ImagePanel extends JPanel {
private Image img; public ImagePanel(String img) { this(new ImageIcon(img).getImage()); } public ImagePanel(Image img) { this.img = img; Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); } public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, null); }
}
</source>
Retrieve all components individually:
<source lang="java">
import java.awt.ruponent; import javax.swing.JFrame; public class Main {
public static void main(String[] argv) throws Exception { JFrame container = new JFrame(); // Get number of children int count = container.getComponentCount(); for (int i = 0; i < count; i++) { Component c = container.getComponent(i); } }
}
</source>